2014-04-07 1 views
2

버튼이 있고 클릭했을 때 입력 필드가 일부 표시됩니다. 입력 필드는 키 업 이벤트 자체를 추적합니다.링크를 클릭하면 집중 입력의 Keyup 이벤트가 발생했습니다.

키보드를 사용하여 단추를 클릭하면 (포커스가있는 상태로 돌아 오기) 입력 필드에 예기치 않은 키 이벤트가 수신됩니다.

데모 : http://jsfiddle.net/LpXGM/3/ (다만 명중 반환 및 페이지의 메시지를 보면)

하지만 추가 할 경우 예상대로 제한 시간 모든 작품. 데모 : http://jsfiddle.net/8BRmK/1/ (버튼을 길게 누르면 키 업 이벤트가 발생하지 않음)

왜 이상한 일이 발생합니까? 어떻게 해결할 수 있습니까?

$button.on("click", function(){ 
    showModal(); 
}); 

$emailField.on("keyup", function(event) { 
    // process the event 
}); 

var showModal = function() { 
    $modal.show(); 
    $emailField.focus(); 
}
+1

이 발생합니다. 시간 제한을 사용하면 입력을 삽입하는 함수의 실행이 지연되므로 키 업이 실행될 때 포커스가 없습니다. – adeneo

+0

@adeneo 왜 keyup 이벤트가 발생합니까? 이 바이올린을보십시오 : http://jsfiddle.net/Xg23y/ btn.keyup 이벤트가 발생하지 않았을 때 버튼을 클릭하면 돌아 왔습니다. –

+1

다시 말해서 클릭 후 keyup 이벤트가 발생하므로 포커스가 이미 입력으로 전환되었으므로 버튼에서 keyup 이벤트가 발생하는 이유는 무엇입니까? – adeneo

답변

0

+0

keypres 이벤트를 keydown과 매우 다르므로 사용하지 않으려합니다. http://api.jquery.com/keypress/ –

0

하나의 버튼 클릭 이벤트보다 키보드를 클릭하기 때문에

$(document).ready(function(){ 
    $(document).on("click",".btn",function(e){ 
     $status.append($("<span>btn click</span></br>")); 
    }); 
    $(document).on("keyup",".email",function(e){ 
     $status.append($("<span>keyup " + event.keyCode + "</span></br>")); 
    }); 
    }); 
+0

같은 문제 : http://jsfiddle.net/9M9Wq/4/ –

0

이 예는 일이 발생하려고 $button.on("keyup mouseup", function(){

또는 $emailField.on("keypress", function(event) { 시도해보십시오 핸들러

코드 먼저 불을 피우다. 귀하의 입력 필드에 집중하고 귀하의 keyup 이벤트는 화재입니다. Timeout을 주면 클릭 이벤트가 먼저 발생하지만 시간 초과로 인해 로직이 지연되고 입력 작업에 초점이 맞춰진 키 이벤트보다 입력에 아무런 단어도 입력하지 않아도됩니다. timeOut에없는

+0

왜 keyup 이벤트가 시작 되었습니까? 이 피들을보세요 : jsfiddle.net/Xg23y btn.keyup 이벤트가 발생하지 않은 버튼에 대한 반환을 클릭하십시오. –

+0

바이올린을 실행하고 Enter 키를 누르십시오. – user2075328

1

가능한 해결 방법 : 클릭 이벤트 이후의 keyup 이벤트가 발생이, 그 시간에 포커스가 입력에 이미 있기 때문에 http://jsfiddle.net/agudulin/3axBA/

$button.on("keypress", function(event){ 
    if (event.keyCode == 13) { 
    return false; 
    } 
}); 

$button.on("keyup", function(event){ 
    if (event.keyCode == 13) { 
    showModal(); 
    $status.append($("<span>enter has been pressed</span></br>")); 
    } 
}); 
관련 문제