1. 程式人生 > >IE與火狐關於獲取按鍵不相容處理

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.onkeydown=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火狐等。