我正在創建一個Web前端來控制一個小型機器人。 Ajax調用將在keydown上進行,啓動機器人,並通過keyup來停止它。如何在按住按鍵時避免多個按鍵向上/向下/按下事件?
我的問題是,當按下按鍵時,keydown和按鍵事件似乎循環不斷。有人知道一種方法,只有當按鍵被按下時,纔會有keydown射擊,並且當釋放時彈出鍵控射擊?
- 編輯:我忘了最初提到它,但我試過保存按鈕的狀態。問題在於,當我按下按鍵時,keydown,按鍵和keyup事件一遍又一遍地響起。
我正在創建一個Web前端來控制一個小型機器人。 Ajax調用將在keydown上進行,啓動機器人,並通過keyup來停止它。如何在按住按鍵時避免多個按鍵向上/向下/按下事件?
我的問題是,當按下按鍵時,keydown和按鍵事件似乎循環不斷。有人知道一種方法,只有當按鍵被按下時,纔會有keydown射擊,並且當釋放時彈出鍵控射擊?
- 編輯:我忘了最初提到它,但我試過保存按鈕的狀態。問題在於,當我按下按鍵時,keydown,按鍵和keyup事件一遍又一遍地響起。
您可以嘗試保存密鑰的狀態。當鑰匙掉下來時,檢查鑰匙是否已經按下,如果沒有,啓動機器人並將鑰匙標記爲按下。如果它已經被按下,不要做任何事情。在鑰匙上,做同樣的事情停止機器人並將鑰匙標記爲未按下。
當您啓動您的機器人時,請從keypress事件中移除事件處理程序,併爲keyup事件添加事件處理程序以停止機器人。
當你的keyup事件觸發時,停止機器人並將你的按鍵處理程序添加回來。
編輯:實際上從您的keydown事件中刪除事件處理程序。你會想要使用keydown和keyup事件...而不是按鍵。
所以基本上:
我無法重現該問題- 我沒有找到任何密鑰從keydown拋出的事件, 無論我按住一個鍵多久。
該方法監聽keydown,運行一些代碼,並在等待另一個keydown之前等待keyup。
該警報僅在一個密鑰上調用。
var A=[], who=// I used a textarea, substititute your own target
who.onkeydown= who.onkeyup= function(e){
e=window.event || e;
var t= e.type, target= e.target || e.srcElement;
A.push(t);
if(t== 'keydown'){
// start robot and stop listening to keydown
target.onkeydown= '';
}
else if(t== 'keyup'){
// stop robot and listen for keydown
target.onkeydown= arguments.callee;
alert(A)
}
}
當你得到這種行爲時,你使用了什麼瀏覽器? – 2010-03-08 14:04:17
我在Chrome和Firefox上都試過它 – Rammay 2010-03-08 14:20:04