2012-04-22 110 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