javascript键盘事件总结

这两天做了一个AutoComplete,顺便研究了一下js的键盘事件,简单总结一下学到的东西

Firefox 返回键值
keyCode(keypress) 功能键(Shift,Ctrl,Alt,PrintScreen,ScrollLock无返回值)返回正确值,以外的所有键值皆为0
keyCode(keydown) 返回除PrintScreen外所有键值,字母键皆以大写状态显示键值(65-90)
keyCode(keyup) 返回除PrintScreen外所有键值,字母键皆以大写状态显示键值(65-90)
charCode(keypress) 返回字符键大小写键值(65-90,97-122),Shift,Ctrl,Alt,PrintScreen, ScrollLock无返回值,其他所有键值为0
charCode(keydown) 所有键值为0
charCode(keyup) 所有键值为0
IE 返回键值
keyCode(keypress) 返回出系统按键外所有字符键的正确值(区分大小写状态65-90,97-122)
keyCode(keydown) 返回除PrintScreen外所有键值,字母键皆以大写状态显示键值(65-90)
keyCode(keyup) 返回除PrintScreen外所有键值,字母键皆以大写状态显示键值(65-90)
charCode IE不支持该属性

关于三个键盘事件的区别网上通常这样解释
onkeydown 在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。
onkeypress 在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。
onkeyup 在用户放开任何先前按下的键盘键时发生

通俗的理解可以像以上那样,但其实并不是如此,我的试验也证实像上下键、退格、回车等在onkeypress事件里也可以在部分浏览器中(如:firefox)被识别。这其中包含keycode向charcode转化,系统对输入流接收、处理、输出等的复杂过程,并且不同浏览器的处理也不尽相同。应该在实际应用中具体把握,明天去公司把我写的测试程序补充上。

特别注意一下,在Opera下,对于onkeydown的默认行为是不能用event.preventDefault()来取消的。

3.25更新:
我用的两个测试文件,key.html能测试每个事件中包含的内容,keyCode等,key0.html能测试键盘事件触发顺序等。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>