2012-04-22 132 views
9

我发现了很多相关的问题(这里和其他地方),但没有具体找到这一个。Javascript:Keydown事件:“向上”箭头键防止进一步的箭头键Keydown事件? (回答:键盘重影)

我正在尝试倾听箭头键(37-40)的keydown事件,但是当以特定顺序使用箭头键时,随后的箭头不会生成“keydown”事件。

例子: http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html

  1. 在那个页面,点击 “在这里输入 - >” 框。
  2. 按住右箭头键:表更新键码39
  3. 继续按住右箭头键,按住向上箭头键:表更新到38
  4. 继续按住右和上箭头键,按住 左箭头键:表更新

但是,如果我做同样的事情,但使用箭头键,而不是箭头键,然后按预期工作。

此外,如果我使用键盘而不是箭头键,它按预期工作。

我正在阻止keydown事件的正常运行(通过在事件监听器中返回false以及通过调用preventDefault()),但行为仍然存在。

我认为这可能是我的键盘,但它发生在笔记本电脑以及朋友的机器上。

有没有人有什么见解到底是怎么回事?或者一些关于解决方法的好主意?

这里是我的意思的一个例子。我知道这可能不是所有的浏览器,但我只是把这个一起在我的笔记本电脑来证明所发生的事情对我来说(在Chrome上W7还铬在Mac OS 10.6.8 &野生动物园)

<html> 
<body> 
<script> 

var keysDown = {}; 
addEventListener("keydown", function(e) { 
    keysDown[e.keyCode] = true; 
    document.getElementById('latestKeydown').value=e.keyCode; 
}, false); 

addEventListener("keyup",function(e){ 
    delete keysDown[e.keyCode]; 
}, false); 

var loop = function(){ 
    document.getElementById('upinput').value=keysDown[38]; 
    document.getElementById('downinput').value=keysDown[40]; 
    document.getElementById('leftinput').value=keysDown[37]; 
    document.getElementById('rightinput').value=keysDown[39]; 
} 

setInterval(loop,1); 

</script> 
Up: <input id="upinput" type=text size=10><br /> 
Down: <input id="downinput" type=text size=10><br /> 
Left: <input id="leftinput" type=text size=10><br /> 
Right: <input id="rightinput" type=text size=10><br /> 
Recent Keydown: <input id="latestKeydown" type=text size=10><br /> 

</body> 
</html> 

再次,问题是: 如果我按住A,然后是S,然后是D,然后是F,然后是G,那么每次开始持有新密钥时都会看到“最近Keydown”更新。

但是,如果我按住右箭头,然后向上箭头,然后左箭头,我没有看到“近期Keydown”更新为左箭头键。

+1

等待一些代码行。 – 2012-04-22 05:56:44

+0

欢迎来到Stack Overflow! – 2012-04-22 05:57:45

+0

*“...由于键盘接线的方式,PC可能无法理解它”* oO – 2012-04-22 06:06:39

回答

3

我不能说这方面的权威,但根据https://stackoverflow.com/a/4177260/562209,除非您正在同时按下修改键和非修饰键,关于多键按下“PC可能不会了解它是由于键盘接线的方式“。

+3

下面是该问题的一个很好的解释:http://www.microsoft.com/appliedsciences/antighostingexplained.mspx – user123444555621 2012-04-22 07:49:28

+0

加耶:(谢谢,伙计们,这似乎是可能的罪魁祸首。 – ElleryTheJones 2012-04-22 14:22:52