0

所以,我有一个 Keydown 组合可以在我的表单的一部分中的 div 之间移动,但是在第一次使用该组合之后,我只能按 ALT 键(键码 18)并且它同时运行函数中的两个 if 语句,因此两次调用我的另一个函数。

它应该在输入 if 之前检查第二个 keydown 事件,或者至少这是我所相信的。

是否有一些清除我需要做的 keydown 命令,或者重置监听 keydown 事件的方法?

var keys = [];

document.onkeydown = function(evt){    
   var key = evt.keyCode;
   keys[key] = true;
    if(keys[18] && keys[78]){
       NewFocus('#Notes');
       console.log("Notes");
    } 
    if(keys[18] && keys[67]){
        NewFocus('#Callers');
        console.log("Callers");
    }

    return false;
}

function NewFocus(newNav)
    {
        $('.navActive').hide().removeClass('navActive');
            console.log("made it to New Focus event.");
        var id = $(newNav);
            console.log("This is the id " + $(id));
        $(id).show().addClass('navActive');

        return false;;
    }

顺便说一句,我在 Safari 和 Chrome 中运行它,你可以看到只看控制台会发生什么。

我一定错过了什么,但不知道是什么。

4

2 回答 2

4

您需要监听onkeyup并使用delete keys[key]来清除该键的状态。

于 2012-11-05T19:07:56.273 回答
1

keys释放键时需要清除数组:

document.onkeyup = function (evt) {
    var key = evt.keyCode;
    keys[key] = false;
};
于 2012-11-05T19:09:50.907 回答