我正在创建一个Web前端来控制一个小型机器人。 Ajax调用将在keydown上进行,启动机器人,并使用keyup来停止它。
我的问题是,当按下键时,keyup,keydown和keypress事件似乎不断循环。有没有人知道一种方法,只有在第一次按下按键时才能点火,并且当按键被释放时才能触发按键?
- 编辑:我原本忘了提它,但我试过保存按钮的状态。问题是当我按住键时,keydown,keypress和keyup事件反复闪烁。
答案 0 :(得分:2)
我无法重现问题 - 我没有发现任何从keydown抛出的keyup事件, 无论我按下一把钥匙多久。
此方法侦听keydown,运行一些代码, 在听另一个keydown之前等待一个键盘。
警报仅在密钥上调用。
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)
}
}
答案 1 :(得分:1)
您可以尝试保存密钥的状态。当钥匙关闭时,检查钥匙是否已被按下,如果没有,启动机器人并将钥匙标记为按下。如果它已被按下,请不要做任何事情。在按键时,执行相同操作以停止机器人并将按键标记为未按下。
答案 2 :(得分:0)
启动机器人时,从按键事件中删除事件处理程序,并为keyup事件添加事件处理程序以停止机器人。
当你的keyup事件触发时,停止机器人并向你添加keypress处理程序。
编辑:实际从keydown事件中删除事件处理程序。你会想要使用keydown和keyup事件......而不是按键。
基本上是这样的: