【问题标题】:How do I check if a event is triggered or when to use keypress versus keyup?如何检查是否触发了事件或何时使用 keypress 与 keyup?
【发布时间】:2018-12-23 00:34:49
【问题描述】:

我使用keypress 事件将页面导航添加到window,并注意到它在某些浏览器上不起作用。如果我在这些浏览器中使用keyup,则会触发该事件。

所以我的问题可以通过了解以下任何一个来解决:

  1. 对于大多数浏览器兼容性,我是使用keyup 还是keypress?我可以吗 两个都用?

  2. 如何测试某个事件是否受支持?例如,如果我知道 浏览器支持按键我会为它添加一个处理程序。如果支持 keyup,我将为此添加一个处理程序。我可以添加事件处理程序 动态的。

历史:

在 ES4 中有一个 willTrigger 方法,但我在 DOM 中没有看到该方法。

更新:
我找到了一个可能的答案here。它说在某些浏览器中keypress 在提到keyup 时没有任何区别。

【问题讨论】:

  • 关于 (1),keyup 和 keypress 的作用不同。据我所知,每个浏览器都支持两者。此外,ES4 从未发布。
  • ES4 没有发布,但是一些功能,例如addEventListener,被迁移到了更高版本的 JS 中。
  • 我在某些浏览器中没有收到任何keypress 事件,但从我一直在阅读的内容来看,这可能是因为它与文本输入更相关。可能会为两者添加处理程序,然后取消事件传播 (developer.mozilla.org/en-US/docs/Web/API/Event/…)

标签: javascript html events keyboard-events dom-events


【解决方案1】:

为了快速区分 keypress 和 keyup,keyup 只会触发一次,无论按键按下多长时间,而 keypress 事件可以触发多次。您可以同时使用两者(我不明白为什么不 - 您会将它们用于不同的事情),并且 basic support for the events 存在跨浏览器(尽管移动浏览器支持的数据尚不完全清楚)。 .keyup()/ onkeyup 和 .keypress() / onkeypress 都有 jquery 等价物

希望对你有帮助

【讨论】:

  • 添加两者大部分都有效。但在 Firefox 中,我正在调度这两个事件。所以我要向前移动两步。我使用了 stopImmediatePropagation 但我现在意识到这仅适用于具有相同事件名称的事件。所以第一个事件获胜。所以我将两者都添加,然后删除另一个的处理程序。
  • 好东西。当然还有 key down 事件,我们不要忘记这一点,但我认为你已经对其进行了排序:)
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 2016-09-21
  • 2011-03-23
  • 1970-01-01
  • 2013-07-31
  • 2014-04-01
  • 2012-01-28
相关资源
最近更新 更多