第一个代码->我的第一个示例不起作用,我不确定为什么。我会说一个条件,例如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/