2010-05-05 4 views
2

위임과 함께 입력 필드에서 키 누르기 이벤트를 수신하고 있습니다. 어떤 이유로 든 필드의 시작 부분에서 커서 UP을 위임하거나 끝에서 커서를 아래로 내리면 위임 된 이벤트가 트리거되지 않습니다. LEFT와 RIGHT는 항상 예상대로 작동합니다.Firefox (JQuery)의 텍스트 필드 시작과 끝에서만 keypress 이벤트가 실행되지 않습니다.

필드에 이벤트 수신기를 직접 바인딩하면 위임과 관련이 있습니다. 아무도 이것이 알고있는 문제인지, 나는 Google/포럼 등에서 아무것도 찾을 수 없다는 것을 알고 있습니까? http://livsey.org/jquery.delegation.html

+0

그런 데모 페이지를 설정하는 정말 좋은 생각 - 나는 모두가 텐데! – Pointy

+0

동의, +1 데모! –

+0

디버그 코드가 "e.which"값을 덤프 할 때 어떻게됩니까? – Pointy

답변

0

이 키가 파이어 폭스에서 거품을하지 않는, 적어도의 경우, 그래서 .delegate() 또는 .live()이 작동하지 않습니다 -

$("div").delegate(":input", "keypress", function(e){ 
    // doesn't get triggered 
}); 

$("div :input").bind("keypress", function(e){ 
    // gets triggered fine 
}); 

다음은 문제를 보여주는 데모입니다. 를 keyDown와 어떤 키를 나타내는 코드를 제공의 keyup

주 : 이것은 알려진 문제,이 경우 다른 이벤트를 사용하기 위해서는 더 나은, keydown 또는 keyup처럼, 당신은 이것에 대해 신속 추천 광고에 대한 jQuery documentation for .keypress()을 볼 수있다 키를 누르는 동안 어떤 문자가 입력되었는지 나타냅니다. 예를 들어, 소문자 "a"는 keydown 및 keyup에 의해 65로보고되지만 키 누르기로 97로보고됩니다. 대문자 "A"는 모든 이벤트에 의해 65로보고됩니다. 이러한 구분 때문에 화살표 키, .keydown() 또는 .keyup()과 같은 특별한 키 입력을 포착하는 것이 더 좋습니다.

이 작품에 코드를 업데이트 :

$("div")().delegate(":input", "keyup", function(e){ 
    log("delegated: "+e.keyCode); 
}); 

$("div :input").bind("keyup", function(e){ 
    log("bound: "+e.keyCode); 
}); 
+0

글쎄, 그의 이벤트 핸들러는 확실히 호출되고 있습니다. 문제는 Firefox가 "keypress"가 아니라 "keyup"및 "keydown"이벤트 루프에 "keyCode"만 설정한다는 것입니다. – Pointy

+0

@Pointy - 바운드 이벤트가 발생했습니다 ... 버블에 따라 위임 된 이벤트가 아니라 실제로 입력 된 캐릭터가 없으므로 거품이 발생하지 않습니다. –

+0

@ 닉 ?? 나는 그의 페이지를 보려고 할 때 그의 대표 핸들러로부터 메시지를 받는다. – Pointy

관련 문제