|
正如我們了解到的,瀏覽器在最開始設計的時候并沒有一個標準,大家都像做實驗似的,最后的成品雖然是有用的,但是肯定造成了兼容性的問題。按鍵問題也不例外:這里有兩個屬性能檢測到用戶按下了什么鍵,雖然有足夠的理由為什么需要兩個屬性,但是依然并不是所有的瀏覽器都支持。
另外,在keypress與keydown和keyup之間還有一些很重要的區別。
最后就是windows和mac的區別了,在mac上要檢測用戶按下了什么鍵簡直比在windows下難了N倍。
keyCode和charCode
能檢測到用戶按下了什么鍵的兩個屬性就是keyCode和charCode了。簡單說來:keyCode是用來檢測用戶真正按下了鍵盤上那個鍵的,而charCode則是給出鍵入字符的ASCII碼。有一些小問題需要注意:大寫的A和小寫的a的keyCode是一樣的,因為他們在鍵盤上就是一個鍵;但是charCode不一樣,因為他倆是兩個不同的字符。
IE和Opera不支持charCode。然而他們會在keyCode里面保存字符信息,但是只是在onkeypress的情況下,在onkeydown/up情況下包含的是鍵的信息。
字符和數字鍵
讓我們以一個簡單的例子開始。小寫a的ASCII碼是97,大寫的是65。那么在兩種情況下,當用戶在鍵盤上敲下相同的鍵的時候,什么時候的鍵值是65呢(相當于大寫的A)
keyCode
charCode
因此,在onkeydown/up的情況下,你能夠從keyCode里面得到鍵值。在onkeypress情況下,想要得到字符值就要使用:evt.charCode || evt.keyCode.
標點符號
我還是決定不對標點符號鍵做測試了。我懷疑這不僅跟瀏覽器和操作系統有關,還可能跟鍵盤設置和默認語言有關。我一般用的是荷蘭語版的windows,如果跟美國版的101鍵的鍵盤相比有很大出入,我一點都不會覺得意外。
比如說shift+,鍵出來的應該是<,但是我測試的ASCII碼的結果卻是'?'的。當我發現了這個問題,我決定還是不在標點符號鍵的問題上浪費時間了.
特別鍵
功能鍵就是只那些不能打印出來的但是卻具有一定功能的鍵。比如shift、ESC、enter等等都是功能鍵。
一些說明:
1、一般,mac的可靠性比windows要差,有些鍵可能檢測不到
2、IE不會觸發下面這鍵的keypress事件:delete, end, enter, escape, 功能鍵, home, insert, pageUp/Down 和 tab。
3、在onkeypress事件下,Safari會給下面這些鍵給出很奇怪的keyCode值:delete, end, 功能鍵, home 和 pageUp.Down。但是在onkeydown/up下面就很正常。
4、Alt,Cmd,Ctrl和shfit鍵在mac上無法探測,不過Opera下面例外。然而你卻可以使用altKey,ctrlKey,shfitKey這些屬性。
如果你需要探測這些鍵,你就探測一下載onkeydown/up下面的keyCode就行了,算是給自己幫忙了,onkeypress和charCode就忘掉吧。
原文后面有個大的鍵值的列表,還有一個測試框,有興趣的童鞋可以移步。
翻譯地址:http://www.quirksmode.org/js/keys.html
轉載請保留以下信息
作者:北玉(tw:@rehawk)
JavaScript技術:JavaScript Event學習第十一章 按鍵的檢測,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。