【问题标题】:JavaScript key handling and browser compatibilityJavaScript 密钥处理和浏览器兼容性
【发布时间】:2010-08-13 10:29:29
【问题描述】:

我正在处理 Javascript 中的密钥处理。我做了一些研究,我想知道我是否对密钥处理有正确的理解。

KeyDown/KeyUp 事件 IE7+ 和 Firefox 3.5+ 都支持 key down 和 key up 事件我没有检查早期版本的浏览器,但我猜他们也支持这些事件。

说键盘上的每个键总是有一个键码是否正确。

字符代码

CharCode 值在按键上可用。大多数键将具有代表实际值的字符代码。有些键没有与之关联的字符码。例如。退格、删除、箭头键。

我是否正确地说,在按键上,charcode 将与 keycode 相同?

事件顺序

  • 按键
  • 按键
  • KeyUp

此顺序是否因浏览器而异?例如,我有两个功能。第一个绑定到 KeyDown 事件,第二个绑定到 KeyPress 事件。调用 KeyPress 事件意味着 KeyDown 事件也将被调用,当我只希望其中一个事件起作用时。

最后,我一直在考虑根据版本浏览器使用不同的密钥处理例程。例如:

  • 检查浏览器版本
  • 根据浏览器版本获取密钥处理例程

这将引入额外的代码,但应该会简化维护。另外,将来当我想为不同的浏览器提供支持时,我可以简单地添加另一个例程,它不会影响现有的字符处理例程。

到目前为止,我一直在阅读http://www.quirksmode.org

【问题讨论】:

    标签: javascript cross-browser dom-events onkeydown onkeypress


    【解决方案1】:

    查看以下页面,他们会回答您的问题:

    onkeydown event, onkeypress event, keyCode property, charCode property, which property

    【讨论】:

    • 太好了,谢谢。遇到内置函数以查看在事件发生时是否按住 shift/ctr/alt 等。意味着我可以摆脱几行代码。
    【解决方案2】:

    Jan Wolter 的以下文章从未让我失望过,而且绝对是我所见过的有关浏览器关键事件的最佳资源:http://unixpapa.com/js/key.html。它回答了您提出的所有问题。

    需要强调的一点是,通过谨慎使用您可以支配的关键事件属性,您将几乎肯定永远不会需要在您的密钥处理代码中嗅探特定浏览器。

    【讨论】:

    • 漂亮的文章,今天还成立吗??
    • @SurajJain:是的,尽管现代浏览器支持更新、更好的属性,例如key。我怀疑旧属性是否会很快消失,尽管它们已被正式弃用。
    【解决方案3】:

    2015 年更新:

    According to MDN event.charCodeevent.keyCodeevent.which 均已弃用。 event.key 是检查哪个键被按下的最新和最热门的方法。

    它看起来很容易使用,但浏览器支持并不完美。我们现在只支持 Chrome 45+(AFAIK 尚未推出)、Firefox 23+ 和 IE 9+。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2014-09-12
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多