2016-06-07 121 views
0

我的webapp已经实现了键盘快捷键。对于每个键,无论是否按下,都有一个布尔变量。当出现一些特定的快捷方式时,我会采取一些行动失去焦点时处理键盘事件的最佳方式

问题是,有些操作会使我的文档失去焦点(例如打开对话框,保存对话框或简单警报()),并且我的web应用程序无法找到密钥是否被释放。

即使在alert()期间,是否可以继续获取键盘事件?我知道我可以将所有键设置为False,当出现一些快捷键时。有更优雅的东西吗?

if(ctrlDown && mDown) alert("..."); 

看到这里:https://jsfiddle.net/fvqhbLa1/1/该文件显示是否按下Ctrl,M,B。但是当你按下Ctrl和M时,会有提醒,关闭它之后文件仍然认为Ctrl和M被按下了。现在,您可以按下Ctrl键并在不按下M的情况下触发警报()。

回答

0

发送警报时,您可以重置所有按下的键,因为大多数用户在显示警告框时不会按Ctrl。

您还可以使用'e.shiftKey','e.ctrlKey'和'e.altKey'属性检查shift,ctrl和alt键是否关闭。

alert("Ctrl + M pressed!"); 
ctrlDown = bDown = mDown = false; 

https://jsfiddle.net/fvqhbLa1/3/

+0

我知道这个问题 “解决方案”。但我有大约100个快捷方式和100个动作,例如Ctrl + Space是动作A,Ctrl + Space + Alt是动作B(A和B保持焦点),我需要在A和B之间切换,只需按下并释放Alt键(同时按住Ctrl和空格键)。如果我像你说的那样做,我的代码会延长两倍。 –

+0

有没有办法让按键没有键盘事件?或者其他解决方案? –