这两天做了一个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能测试键盘事件触发顺序等。

