为什么这个事件侦听器在 javascript 中的数组中对多个键不起作用

Why wont this event listener work for multiple keys when in an array in javascript?

本文关键字:数组 不起作用 javascript 事件 侦听器 为什么      更新时间:2023-09-26

第一个代码--> 我的第一个示例不起作用,我不确定为什么。我会说一个条件,比如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/尝试按住一个键,然后按住第二个键,然后松开第二个键。您会注意到,将不再记录第一个密钥。

*编辑:解决方法是像这样实现它:

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

不同之处在于,在这种情况下,没有任何东西被覆盖,而在您的示例中,您的第一次按键被第二次按键覆盖(并且不再保存)。