我正在创建一个Web前端来控制一个小型机器人, AJAX 调用将在keydown
上进行,以启动机器人,并在keyup
上停止机器人。
我的问题是,当一个键被按住时,keyup
、keydown
和keypress
事件似乎不断地循环。有人知道一种方法吗?只有在第一次按下键时才触发keydown
,而在释放键时才触发keyup
。
--edit:我本来忘了提,但我试过保存按钮的状态,问题是keydown
,keypress
和keyup
事件在我按住键的时候一遍又一遍地触发。
3条答案
按热度按时间iugsix8n1#
我无法重现这个问题--无论我按住一个键多长时间,我都找不到从keydown抛出的keyup事件。
此方法侦听keydown,运行一些代码,并在侦听另一个keydown之前等待keyup。
警报仅在按键时调用。
scyqe7ek2#
您可以尝试保存键的状态。当键按下时,检查是否已按下键,如果未按下,则启动机器人并将键标记为按下。如果已按下键,则不执行任何操作。在键打开时,执行相同的操作以停止机器人并将键标记为未按下。
0ejtzxu13#
启动robot时,从keypress事件中移除事件处理程序,并为keyup事件添加一个事件处理程序以停止robot。
当keyup事件触发时,停止robot并重新添加按键处理程序。
编辑:实际上从你的keydown事件中删除事件处理程序。你会想使用keydown和keyup事件...而不是按键。
所以基本上
1.分配keydown事件处理程序
1.分配keyup事件处理程序
1.在keydown上,删除keydown事件处理程序并启动robot
1.在keyup上,重新分配keydown事件处理程序