IE与火狐关于获取按键不兼容处理

用 js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown、 onkeypress和onkeyup这三个事件句柄。一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时 候的keyup。

在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级。这里所谓的高级是指,当用户按 下shift + 1时,keypress是对这个按键事件进行解析后返回一个可打印的“!”字符,而keydown和keyup只是记录了shift + 1这个事件。[1]

但是keypress只能针对一些可以打印出来的字符有效,而对于功能按键,如F1-F12、 Backspace、Enter、Escape、PageUP、PageDown和箭头方向等,就不会产生keypress事件,但是可以产生 keydown和keyup事件。然而在FireFox中,功能按键是可以产生keypress事件的。

传递给keydown、keypress和keyup事件句柄的事件对象有一些通用的属性。如果Alt、Ctrl或Shift和一个按键一起按下,这通过事件的altKey、ctrlKey和shiftKey属性表示,这些属性在FireFox和IE中是通用的。

凡是涉及浏览器的js,就都要考虑浏览器兼容的问题。
目前常用的浏览器主要有基于IE和基于Mozilla两大类。Maxthon是基于IE内核的,而FireFox和Opera是基于Mozilla内核的。

在火狐中需要e变量,而在IE中不需要,而只用window.event代替,用window.event.charCode代替e.which,下面就获取回车键的实例说一下:

document.οnkeydοwn=function(event)
	{
		e = event ? event :(window.event ? window.event : null);
		var currKey=0;
		currKey=e.keyCode||e.which||e.charCode;
		if(currKey==13){
			//执行的方法
			$('#loginFormId').submit();
			//alert('回车检测到了');
		}
	};


捕捉event事件,是否是keydown,是的话,将它赋给隐含变量e,否则就是IE的window.event。

将e.keyCode||e.which||e.charCode的值传给一个变量,该语句兼容IE火狐等。


你可能感兴趣的:(IE与火狐关于获取按键不兼容处理)