JavaScript按键处理和浏览器兼容性

10

我正在研究JavaScript中的按键处理。我已经做了一些研究,想知道我对按键处理是否有正确的理解。

KeyDown/KeyUp事件 键下和键上事件由IE7+和Firefox 3.5+支持。我没有检查浏览器的早期版本,但我猜测它们也支持这些事件。

每个键盘上的键都会有一个keycode,这样说是正确的吗?

CharCode

Charcode值可在keypress上使用。大多数键将具有表示实际值的charcodes。有些键不会与charcode相关联,例如退格键、删除键和箭头键。

在keypress上,charcode与keycode相同,这样说是正确的吗?

事件顺序

  • KeyDown
  • KeyPress
  • KeyUp

这个顺序因浏览器而异吗?例如,我有两个函数。第一个绑定到KeyDown事件,第二个绑定到KeyPress事件。调用一个KeyPress事件意味着KeyDown事件也将被调用,而我只想让其中一个事件起作用。

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

  • 检查浏览器版本
  • 根据浏览器版本获取键处理程序

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

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

3个回答

7

太好了,谢谢。我发现了内置函数,可以查看事件发生时是否按下了shift/ctr/alt等键。这意味着我可以减少一些代码行数。 - user338195

6
以下文章由Jan Wolter撰写,从未让我失望,是我见过的有关浏览器键事件的最佳资源:http://unixpapa.com/js/key.html。它回答了你提出的所有问题。
需要强调的一点是,通过仔细使用可用的键事件属性,您几乎肯定不需要在键处理代码中嗅探特定的浏览器。

优美的文章,它今天还适用吗? - Suraj Jain
@SurajJain:是的,尽管现代浏览器支持更新、更好的属性,如key。我怀疑旧属性不会很快消失,尽管它们已经被正式弃用。 - Tim Down

0

2015年更新:

根据MDN的说法event.charCodeevent.keyCodeevent.which都已经被弃用。event.key是最新、最热门的检查按键的方法。

看起来很容易使用,但浏览器支持并不完美。目前只有Chrome 45+(还未发布),Firefox 23+和IE 9+部分支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接