JavaScript密钥处理和浏览器兼容性

时间:2010-08-13 10:29:29

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

我正在研究java脚本中的键处理。我做了一些研究,我想知道我是否对键处理有正确的理解。

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

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

则charCode

keypress上有CharCode值。大多数键都有代表实际值的字符代码。某些键不会有与之关联的字符代码。例如。退格,删除,箭头键。

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

活动顺序

  • 的KeyDown
  • 按键响应
  • KEYUP

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

请参阅以下页面,他们将回答您的问题:

onkeydown eventonkeypress eventkeyCode propertycharCode propertywhich property

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

2015年更新:

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

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