键盘事件

Web前端开发QQ群 110939958-业余程序员

关于js的键盘事件

以前总结过各个浏览器中键盘事件的触发情况,可以看出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

浏览器中的key event–ubuntu

测试了一下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