Javascript 按住多个关键点时出现的奇怪情况
使用下面的代码,当按下某个键时,如果该键不在keymap数组中,则会将其keycode推送到该数组中;当松开某个键时,会将其keycode从数组中取出。在不断地将keymap数组推到控制台进行测试时,我发现了一些奇怪的东西Javascript 按住多个关键点时出现的奇怪情况,javascript,jquery,keydown,keyup,keymapping,Javascript,Jquery,Keydown,Keyup,Keymapping,使用下面的代码,当按下某个键时,如果该键不在keymap数组中,则会将其keycode推送到该数组中;当松开某个键时,会将其keycode从数组中取出。在不断地将keymap数组推到控制台进行测试时,我发现了一些奇怪的东西 var keymap = []; $(window).keydown(function(e) { if($.inArray(e.keyCode,keymap) == -1) {keymap.push(e.keyCode);} }); $(window).keyup
var keymap = [];
$(window).keydown(function(e) {
if($.inArray(e.keyCode,keymap) == -1) {keymap.push(e.keyCode);}
});
$(window).keyup(function(e) {
for(i = 0;i < keymap.length;i++) {
if(keymap[i] = e.keyCode) {keymap.splice(i,1);}
}
});
setInterval(function() {console.log(keymap);},100);
var-keymap=[];
$(窗口).keydown(函数(e){
if($.inArray(e.keyCode,keymap)=-1){keymap.push(e.keyCode);}
});
$(窗口).keyup(函数(e){
对于(i=0;i
有谁能告诉我发生了什么事吗?你的比较实际上是一项作业。将
if(keymap[i]=e.keyCode)
更改为
if (keymap[i] == e.keyCode)
// ^
此外,还应使用局部变量:
for(var i = 0; …
// ^^^
虽然对于项目应该是唯一的数组来说并不重要,但在删除一个项目或跳过检查下一个项目后,需要减少计数器变量i
:
keymap.splice(i--,1)
// ^^
在keyup
if(keymap[i]=e.keyCode)
中应该是if(keymap[i]=e.keyCode)
。keymap在哪里定义?您应该使用e.which
而不是e.keyCode
,但不能使用critical@zgr024抱歉,我遗漏了声明,在它的作品中编辑了它。。。只要把间隔改成你想要的。。。我觉得100毫秒有点快。。。但正如Yograj所建议的,在讨论过程中,您错过了==项,我们发现在下面提到的几次修复之后,凯恩斯的键盘遇到了硬件问题,不能同时注册超过两个按键。不幸的是,它不能修复我的问题。我得出了与Bergi相同的结论,但是花了更长的时间。下面是一个JSFIDLE:@Cains:然后对事件处理程序中的e.keycode
进行一些日志记录,以查看它们是否触发错误,您的添加/删除代码是否工作(我的答案更正了这一点),或者是否有其他东西干扰了keymap
数组。