我正在创建一个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