为什么这个事件侦听器在 javascript 中的数组中对多个键不起作用
Why wont this event listener work for multiple keys when in an array in javascript?
第一个代码--> 我的第一个示例不起作用,我不确定为什么。我会说一个条件,比如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];
});
不同之处在于,在这种情况下,没有任何东西被覆盖,而在您的示例中,您的第一次按键被第二次按键覆盖(并且不再保存)。
相关文章:
- For循环与数组不起作用
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- 映射 jQuery 对象的数组不起作用
- Javascript-自定义数组不起作用
- 函数中的Javascript数组不起作用
- Js browserify 需要从字符串数组不起作用
- 来自 JSON 的 Javascript 数组不起作用
- 按属性排序的 Javascript 对象数组不起作用
- 在 JavaScript 中合并数组不起作用
- 普通的OOP Javascript:将localStorage视为数组不起作用
- 为什么这个map reduce Promises数组不起作用,而只是减少它起作用
- 在IE 10中,javascript数组不起作用
- if(array.length===1) 条件对长度> 1 的数组不起作用
- .将Integer推入数组不起作用JS/JQuery
- 在 java 脚本中处理多维数组不起作用
- 通过 AJAX 提交 PHP 数组不起作用
- 将json转换为Javascript数组不起作用
- 带冒号的数组不起作用
- 将事件处理程序添加到按钮数组不起作用 Javascript
- javascript中的echo php数组不起作用