【问题标题】:Is there a KeyUp event when a key is released outside the page?在页面外释放键时是否有 KeyUp 事件?
【发布时间】:2011-02-01 22:40:06
【问题描述】:

我目前可以使用依赖于 KeyDown / KeyUp 事件的库来查看使用 JavaScript 按下了哪些键。虽然当在页面内按下/释放键时这会很好地工作,但当在页面外释放键时(即,当它没有焦点时),事件不会触发。

所以,当页面有焦点时可以按下Enter 键(事件会触发,一切顺利),但是当他在页面没有焦点时释放它时,事件不 触发,这导致我无法知道该键是否仍被按下。

关于使用的库,请参考: http://www.n-son.com/scripts/keyLib/keyLib.js

当页面没有焦点时,是否可以知道何时释放键?或者是否有一个通用功能可以检查是否在特定时间按下了某个键?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当窗口失去焦点时,我会将你所有的 this-key-is-down 标志重置为 false,你可以使用 windowblur 事件来做到这一点:

    var someKeyIsDown;
    
    window.onblur = function() {
        someKeyIsDown = false;
    };
    

    【讨论】:

      【解决方案2】:

      如果他们不与“您的”程序交互(在网页的情况下,“您的”程序是他们网络浏览器的一部分),那么他们所做的任何事情都不会生成您的程序知道的事件。

      允许网页了解与其无关的事件(例如我在完全独立的程序中键入机密电子邮件,或输入密码或其他任何事情)将是一个巨大的安全风险。

      【讨论】:

      • 好点,我没想到这一点。拥有在线键盘记录器是个坏主意……
      【解决方案3】:

      你不能使用更高级别的事件,例如 KeyPressed ,它保证键被按下然后释放?

      【讨论】:

      • 恐怕我在游戏中使用它。因此,只要按下一个键就需要调用函数,所以它不仅仅是一个按下/释放的情况。
      • 您无法捕捉窗外发生的事件。您能做的最好的事情就是收听焦点/模糊事件并将它们视为 KeyUp 事件。这与您在那里询问的鼠标事件相当:stackoverflow.com/questions/4748177/…
      • 是的,这是合理的,谢谢。事实上,我确实已经问过鼠标了,但也许会有一个按键的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 2017-10-15
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多