键盘事件
Web前端开发QQ群 110939958-业余程序员
以前总结过各个浏览器中键盘事件的触发情况,可以看出keydown, keyup是比较靠谱的
因为它们是系统提供的比较底层的事件,对应的是键码keyCode标识了哪个键被按下(并不知道输入的是哪个字符)
keypress事件能够给出输入的可打印字符,但是这个事件在各个浏览器和操作系统中存在着很多不兼容性
在火狐中,在keypress中event.charCode保存了键入字符的ASCLL码,而其它的浏览器可以使用keyCode,
要想获得这个字符可以使用String.fromCharCode()
阻止默认行为
用户的键入是可以用js来阻止的,相关代码对应为IE的 returnValue=false;和标准浏览器的preventDefault();
实际中遇到的情况:
除了Opera,在keydown的时候阻止时就可以取消键入的事件
而Opera中需要在keypress的时候阻止。
这是Window XP(sp3)下的测试结果,如下表:
Key Event
(windows XP)
| 浏览器 |
一次触发 |
连续触发 |
| |
控制键 |
非控制键 |
控制键 |
非控制键 |
| IE8/8.0.6001 |
keydown
keyup |
keydown
keypress
keyup |
keydown |
keydown
keypress |
| FireFox/3.6.2 |
keydown
keyup |
keydown
keypress
keyup |
keydown |
keydown
keypress |
| Chrome/4.1.249.1042 |
keydown
keyup |
keydown
keypress
keyup |
keydown |
keydown
keypress |
| Safari/4.0.3 |
keydown
keyup |
keydown
keypress
keyup |
keydown |
keydown
keypress |
| Opera/10.51 |
keydown
keyup |
keydown
keypress
keyup |
- |
keypress |
Mouse Event
(windows XP)
| 浏览器 |
单击 |
双击 |
| IE8/8.0.6001 |
mousedown
mouseup
click |
mousedown
mouseup
click
mouseup
dblclick |
| FireFox/3.6.2 |
mousedown
mouseup
click |
mousedown
mouseup
click
mousedown
mouseup
click
dblclick |
| Chrome/4.1.249.1042 |
mousedown
mouseup
click |
mousedown
mouseup
click
mousedown
mouseup
click
dblclick |
| Safari/4.0.3 |
mousedown
mouseup
click |
mousedown
mouseup
click
mousedown
mouseup
click
dblclick |
| Opera/10.51 |
mousedown
mouseup
click |
mousedown
mouseup
click
mousedown
mouseup
click
dblclick |
测试了一下ubuntu中的浏览器对于键盘事件的触发情况,结果如下:
Key Event
(Ubuntu9.10)
| 浏览器 |
一次触发 |
连续触发 |
| |
控制键 |
非控制键 |
控制键 |
非控制键 |
| FireFox/3.6 |
keydown
keyup |
keydown
keypress
keyup |
- |
keydown
keypress
keyup |
| Chromium/5.0.318.0 |
keydown
keyup |
keydown
keyup |
- |
keydown
keyup |
| Opera/10.10 |
keydown
keyup |
keydown
keypress
keyup |
- |
keypress |