Javascript 按住多个关键点时出现的奇怪情况

Javascript 按住多个关键点时出现的奇怪情况,javascript,jquery,keydown,keyup,keymapping,Javascript,Jquery,Keydown,Keyup,Keymapping,使用下面的代码,当按下某个键时,如果该键不在keymap数组中,则会将其keycode推送到该数组中;当松开某个键时,会将其keycode从数组中取出。在不断地将keymap数组推到控制台进行测试时,我发现了一些奇怪的东西 var keymap = []; $(window).keydown(function(e) { if($.inArray(e.keyCode,keymap) == -1) {keymap.push(e.keyCode);} }); $(window).keyup

使用下面的代码,当按下某个键时,如果该键不在keymap数组中,则会将其keycode推送到该数组中;当松开某个键时,会将其keycode从数组中取出。在不断地将keymap数组推到控制台进行测试时,我发现了一些奇怪的东西

var keymap = [];

$(window).keydown(function(e) {
    if($.inArray(e.keyCode,keymap) == -1) {keymap.push(e.keyCode);}
});

$(window).keyup(function(e) {
    for(i = 0;i < keymap.length;i++) {
        if(keymap[i] = e.keyCode) {keymap.splice(i,1);}
    }
});

setInterval(function() {console.log(keymap);},100);
var-keymap=[];
$(窗口).keydown(函数(e){
if($.inArray(e.keyCode,keymap)=-1){keymap.push(e.keyCode);}
});
$(窗口).keyup(函数(e){
对于(i=0;i
  • 如果我同时按住a和d键,它们的键码会出现在keymap中,那么如果我按住w键,它们的三个键码都会出现。现在,当我放开w时,它将从数组中移除,但d也是如此,即使我仍然按住d

  • 然后我发现我可以按住a、w和d,它们都会被放到keymap中,但当我按住它们时,它不会把w、a和s放到keymap中。其中两个的组合将被加入,但第三个不会


  • 有谁能告诉我发生了什么事吗?

    你的比较实际上是一项作业。将
    if(keymap[i]=e.keyCode)
    更改为

    if (keymap[i] == e.keyCode)
    //             ^
    
    此外,还应使用局部变量:

    for(var i = 0; …
    //  ^^^
    
    虽然对于项目应该是唯一的数组来说并不重要,但在删除一个项目或跳过检查下一个项目后,需要减少计数器变量
    i

    keymap.splice(i--,1)
    //             ^^
    

    在keyup
    if(keymap[i]=e.keyCode)
    中应该是
    if(keymap[i]=e.keyCode)
    。keymap在哪里定义?您应该使用
    e.which
    而不是
    e.keyCode
    ,但不能使用critical@zgr024抱歉,我遗漏了声明,在它的作品中编辑了它。。。只要把间隔改成你想要的。。。我觉得100毫秒有点快。。。但正如Yograj所建议的,在讨论过程中,您错过了==项,我们发现在下面提到的几次修复之后,凯恩斯的键盘遇到了硬件问题,不能同时注册超过两个按键。不幸的是,它不能修复我的问题。我得出了与Bergi相同的结论,但是花了更长的时间。下面是一个JSFIDLE:@Cains:然后对事件处理程序中的
    e.keycode
    进行一些日志记录,以查看它们是否触发错误,您的添加/删除代码是否工作(我的答案更正了这一点),或者是否有其他东西干扰了
    keymap
    数组。