2011-05-10 3 views
9

키보드의 'Enter'키를 특정 JavaScript 메소드에 바인드해야하지만 특정 텍스트 필드에만 포커스가있을 때만 바인딩해야합니다.입력란에 'enter'키를 입력하십시오.

<input id="post" type="text" style="width:400px;"/> 

어떻게하면됩니까?

제출 작업이있는 양식 및 자료로 수행 할 수 있지만 위의 input 필드에 포커스가있을 때 '입력'키를 특정 기능에 바인딩 할 수 있습니까?

답변

18
$("#post").focus(function() { 
    $(this).data("hasfocus", true); 
}); 

$("#post").blur(function() { 
    $(this).data("hasfocus", false); 
}); 

$(document.body).keyup(function(ev) { 
    // 13 is ENTER 
    if (ev.which === 13 && $("#post").data("hasfocus")) { 
     ... 
    } 
}); 

내가 대신 직접보다는 전체 페이지에서 이벤트를 수신하여 $("#post") 입력을하여의 keyup 입력 이벤트를 결합하는 것이 좋습니다.

+0

내가 기억처럼 당신이 뭔가를 할 수있는 기능을 사용하는 경우 폼이 제출되는 것을 막기 위해 함수 호출 전에'e.preventDefault();'를 던져야한다. – Pachonk

+1

#post에만 바인드 한 다음 전체 문서를 듣기위한 코드를 작성 하시겠습니까? 나는 심지어 ... – user151496

12

onkeyup 이벤트를 해당 입력에 바인딩하면됩니다. 정의에 따라 입력에 포커스가있을 때만 키 입력 이벤트가 수신되므로 포커스를 확인하는 것에 대해 걱정할 필요가 없습니다.

나는 문서 준비 핸들러가 같은 것을 할 내에 있도록, 귀하의 질문에 태그를 포함하기 때문에 JQuery와 OK 가정 :

$("#IDforyourcontrol").keyup(function(ev) { 
    // 13 is ENTER 
    if (ev.which === 13 && /*whatever other conditions you care about*/) { 
     // do something 
    } 
}); 
+0

"포커스가있을 때 입력은 키 입력 이벤트 만받습니다"라는 정의는 엄격히 사실이 아닙니다. 이벤트는 프로그램에 따라 파견 될 수 있으므로 입력에 포커스가 없을 때 입력이 키 업 이벤트를 수신 할 수 있습니다 (다른 요소의 많은 이벤트에서 버블 링 및 캡처 단계도 고려해야 함). 그러나 입력에 키 업 수신기를 추가하면 OP 요구 사항에 충분합니다. – RobG

+0

좋아, 물론, 프로그래밍 방식으로 트리거 된 이벤트에 대해서는 생각하지 않았습니다. 누군가가 프로그래밍 방식으로 입력 키의 키 입력을 트리거하고 사용자 동작과 구별하기를 원하지는 않을 것 같습니다. 그래도 내 목적은이 목적을 위해 일반적으로 초점이 어디에 있는지 확인하는 것에 대해 걱정할 필요가 없다는 것입니다. Raynos의 대답은 포커스도 허용하는 방법을 설명합니다. 따라서 이벤트를 document.body에 바인딩하지 않더라도 OP에보다 완벽하게 답변 할 것입니다.하지만 (그렇다고해서 그런 유형의 포커스를 확인할 필요가 없었습니다.) – nnnnnn

+0

좋은 답변, 암시 적, 공연. 입력 자체에''그리고 나서 myFunction (e) {if (e.which === 13 ....)' –

관련 문제