2011-10-07 2 views
4

I가 내가 제안을 끌어하고자하는 다음 입력 필드 때 사용자 유형 :이유 및 onblur가 작동하지 않습니다 (JQuery와/자바 스크립트)

<input type = 'text' name= 'target' id='target' style='width:150px' onblur ='setTimeout('removeSuggestions()', 20);' onkeyup ='getSuggestions(this.value);'/> 

는 아래의 "제안"사업부가와 내가 다음 자바 스크립트를 사용합니다.

필드 외부를 클릭하면 .... 제안 div가 사라지거나 더 명시 적으로해야합니까?

감사합니다.

+1

을하는 데 도움이

$(function(){ $('#target').blur(function(e) { setTimeout(function(){ removeSuggestions() }, 20); }); $('#target').keyup(function(e) { getSuggestions(e.target.value); }); }); 

희망은 그래서 당신은 기본적으로 [자동 완성] (http://jqueryui.com/demos/autocomplete/)를 개혁하는? – NullUserException

답변

6

귀하의 문제는 여기에 있습니다 : 어떤 이유

<input type = 'text' name= 'target' id='target' style='width:150px' onblur ='setTimeout('removeSuggestions()', 20);' onkeyup ='getSuggestions(this.value);'/> 

당신이 당신의 속성 값을 둘러싸는 작은 따옴표를 사용하는,하지만 당신은 또한() setTimout에서 함수 호출을 포위를 사용하고 있습니다. 따라서 브라우저가 구문 분석하면 속성이 중지됩니다.

그러면 JS 오류가 발생합니다.

HTML 속성을 둘러싸 기 위해 큰 따옴표를 사용하십시오.

<input type = "text" name= "target" id="target" style="width:150px" onblur ="setTimeout('removeSuggestions()', 20);" onkeyup = "getSuggestions(this.value);"/> 

또한 setTimout()을 사용하는 가장 좋은 방법은 아닙니다. 대신 익명 함수를 사용하십시오.

또한 바인딩 이벤트 리스너 인라인은 좋지 않습니다. 대신 눈에 잘 띄지 않는 JavaScript를 사용하십시오.

1
<input type = 'text' name= 'target' id='target' style='width:150px' onblur ="setTimeout('removeSuggestions()', 20);" onkeyup ='getSuggestions(this.value);'/> 

removeSuggestions은 리터럴로 처리되어야하므로 특성 값에 큰 따옴표를 사용해야합니다.

4

다른 작은 따옴표 내부에 작은 따옴표를 가지고 :

onblur ='setTimeout('removeSuggestions()', 20);' 

는 또한

onblur='setTimeout("removeSuggestions()", 20);' 

읽어야한다, 나는 것 HTML 태그의 속성과 그 값 (주석 참조) 사이에 공백을 넣어하지 않는 것이 좋습니다 엄격한 파서가있는 일부 브라우저에서는 문제가 발생할 수 있습니다.

+0

+1 나는 속성 이름, 기호와 값이 같은 사이에 공백을 두지 않는다는 것을 분명히 할 것이다. 당신이 말한 방식대로, 당신은 여러 개의 속성들 사이에 공백이 없어야한다는 것을 의미하는 것처럼 보일 수 있습니다. 물론 그것은 있어야합니다. '' –

관련 문제