为什么我要按键两次?

时间:2011-01-24 08:00:44

标签: javascript html key keypress onkeydown

我正在制作一个小型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()"/>

1 个答案:

答案 0 :(得分:4)

onKeyDown事件发生之前该字符实际上已附加到文本框中。

要捕获新角色,请改为使用onkeyup事件。

无论如何,您的代码当前不是跨浏览器.. window.event不是标准的,而是将事件作为参数传递给函数,如下所示:

onKeyPress="return submitenter(event)"

然后在函数中:

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