第一个代码->我的第一个示例不起作用,我不确定为什么。我会说一个条件,例如if(keys[38]),其中示例中的38是event.keyCode。如果为true,则应执行if语句。

第二个代码->第二个示例仅在按下一个键时才有效,但我不确定为什么对多个键也不起作用。对于多个键,我会说类似if(keys[38] && keys[40])的内容,但那行不通,但是应注意,它仅适用于一个键,例如if(keys[38])

我知道还有其他方法可以使它起作用,但是我的目标是弄清楚为什么这些代码段不起作用。

第一个代码段:

var keys = [];
  addEventListener("keydown", function(event) {
    keys[event.keyCode] = event.type == "keydown";
    event.preventDefault();
  });
  /*conditions*/


第二段代码:

var keys = [];
  addEventListener("keydown", function(event) {
    keys[event.keyCode] = event.type == "keydown";
    event.preventDefault();
    /* conditions with multiple keys accessing by if(keys[38] && keys[40]*/
  });


提前谢谢:)

最佳答案

当您按下多个键时,您的addEventListener不再侦听您的第一次按键。这就是您的if语句失败的原因。您可以在http://api.jquery.com/event.which/的第一个示例中进行测试,尝试按住一个键,然后按住第二个键,然后释放第二个键。您会注意到第一个密钥将不再被记录。

* edit:一种解决方法是像这样实现它:

var keys = {};

$(document).keydown(function (e) {
    keys[e.which] = true;
});

$(document).keyup(function (e) {
    delete keys[e.which];
});


区别在于,在这种情况下,什么都不会被覆盖,就像在您的示例中,您的第一次按键被第二次按键覆盖(并且不再保存)。

关于javascript - 为什么在JavaScript数组中,此事件监听器不能为多个键工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27701316/

10-12 13:03