【问题标题】:Best way to handle keyboard events when losing focus失去焦点时处理键盘事件的最佳方法
【发布时间】:2016-10-07 16:59:46
【问题描述】:

我的 webapp 已经实现了键盘快捷键。对于每个键,我都有一个布尔变量是否被按下。当某些特定的快捷方式出现时,我会进行一些操作。

问题是,某些操作使我的文档失去焦点(例如打开对话框、保存对话框或简单的 alert()),而我的 web 应用程序没有机会发现键是否被释放。

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

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

看这里:https://jsfiddle.net/fvqhbLa1/1/ 文档显示,是否按下了Ctrl、M、B。但是当你按下 Ctrl 和 M 时,会有警报,关闭它后文档仍然认为按下了 Ctrl 和 M。现在您可以按 Ctrl 并触发 alert() 而无需按 M。

【问题讨论】:

    标签: javascript dom keyboard focus alert


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我知道这个“解决方案”。但我有大约 100 个快捷方式和 100 个操作,例如Ctrl+Space 是动作 A,Ctrl+Space+Alt 是动作 B(A 和 B 保持焦点),我需要通过按下并释放 Alt(同时按住 Ctrl 和 Space)在 A 和 B 之间切换。如果我按照你说的那样做,我的代码会长 2 倍。
    • 有没有办法在没有键盘事件的情况下获得按键?还是其他解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多