2011-01-24 2 views
0

나는 약간의 JS 게임을 만들고 있으며, 사용자의 입력을 최대한 빨리 확인하려고 노력하고 있으므로 onKeyDown 함수를 사용하고 있습니다. 문제는 응답이 5이면 5를 누른 다음 5를 다시 눌러 사용자의 입력을 인식해야합니다. 왜 이런 일이 발생합니까?키를 두 번 눌러야하는 이유는 무엇입니까?

var btn=0 
var num="" 
var digits=1 
function quickanswer(){ 
    if (document.getElementById("autocheck").checked==true&&document.getElementById("txt").value.length==digits){ 
     document.getElementById("dots").innerHTML = "" 
     createdots() 
     document.getElementById("txt").value="" 
     document.getElementById("txt").focus() 
     document.getElementById("txt").style.color = "#000000" 
    } 
} 
function submitenter(){ 
    var keycode = window.event.keyCode; 
    if (keycode == 13) 
     { 
     btnclick(); 
     } 
    if (keycode < 47 || keycode > 58){ 
     return false;} 
    } 

<input id="txt" type="text" onKeyPress="return submitenter()" onKeyDown="quickanswer()"/> 

답변

4

onKeyDown 이벤트는 문자가 실제로 텍스트 상자에 추가됩니다 전에 발생합니다.

새 문자를 캡처하려면 대신 onkeyup 이벤트를 사용하십시오. 함수에서 다음

onKeyPress="return submitenter(event)" 

:

function submitenter(evt){ 
    //IE fix 
    if (typeof evt == "undefined") 
     evt = window.event; 
    var keycode = evt.keyCode || evt.which; 
    ... 
+0

인가

어쨌든, 당신의 코드는 현재 사용하지 크로스 브라우저 window.event 대신이 같은 함수에 인수로 이벤트를 통과 표준 아닙니다 ..입니다 어떤 키가 onKeyDown으로 눌려 졌는지 알 수있는 방법이 있습니까? – Sean

+0

@Sean 네, 이미'submitenter'에서 얻은 것과 같습니다 :'var keycode = evt.keyCode || evt.which; 여기서 "evt"는 브라우저를 교차하도록 위에 설명 된 것과 같습니다. –

관련 문제