gpt4 book ai didi

javascript - 为什么这个事件监听器在 javascript 数组中不能用于多个键?

转载 作者:行者123 更新时间:2023-12-03 11:08:50 26 4
gpt4 key购买 nike

第一个代码--> 我的第一个示例不起作用,我不知道为什么。我会说一个条件,例如 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/ 上的第一个示例中进行测试。尝试按住一个键,然后按住第二个键,然后释放第二个键。您会注意到第一个 key 将不再被记录。

*编辑:解决这个问题的方法是像这样实现它:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com