1.基礎:本次分析原理就是在各個瀏覽器下input內容變化的時候觸發事件的各種不兼容性.在ie下用onpropertychange事件,在其他瀏覽器里用input事件.
2.用例:對每個瀏覽器分別測試如下的情況:
–輸入英文字母時–開啟輸入法時–大小寫不同時–輸入運算符時–按下tab鍵時–輸入法中按下空格時–按下控制鍵時–復制粘貼時–刪除文本時–等等
3.測試開始:(只標出特殊情況,沒標出的表示正常觸發,每次只觸發一次事件)
chrome:
+開啟輸入法時,可以捕捉到輸入事件.
+開啟輸入法的時候按下空格鍵,觸發兩次事件,猜測一次是空格觸發的,一次是輸入法改變輸入框里的文本時觸發的.
+開啟輸入法的時候,按下空格后,立即按下大寫鎖定,此后所有的輸入事件都會被觸發兩次,原因不知.
+沒有開啟輸入法的時候,方向鍵不會觸發事件,但是開啟輸入法后,方向鍵可以觸發事件.
+剪切和粘貼都會觸發事件.+tab鍵不處罰事件,開啟輸入法時,按tab鍵觸發事件.
+按住shift和其他鍵(例如:數字鍵),每輸入一個字符觸發兩次事件.
Firefox:
+開啟輸入法時,不能撲捉到事件,但是按下空格時,可以觸發兩次事件.
+任何時候方向鍵都不觸發事件.
+開啟輸入法的時候,按下空格后,立即按下大寫鎖定,此后所有的輸入事件都會被觸發兩次,原因不知.
+按下tab鍵的時候不觸發事件.++Firefox頁面刷新的時候內容會被保留在輸入框里.
+按住shift和其他鍵(例如:數字鍵),每輸入一個字符觸發兩次事件.
opera:
+正常情況下,在輸入框里按下tab鍵會觸發一次事件,但是此后只要不刷新頁面,tab鍵都不會再觸發此事件.
+開啟輸入法后不會觸發事件,開啟后,方向鍵和tab鍵都不觸發事件.
+開啟輸入法時,按下空格只觸發一次事件,不會出現觸發兩次事件的情況.
+粘貼的時候觸發事件,剪切的時候不觸發
ie:
+輸入法不會觸發事件,按空格也都是只觸發一次,方向鍵任何時刻都不觸發.
+刷新頁面的時候內容會留在input里,而且注意,不管input是不是空的,刷新頁面后自動觸發一次事件.
3.總結.
就一句話,差異很大.
注意input事件可以用在chrome,Firefox,opera里,但是只能用 addEventListener綁定,不能用ontype形式,而onpropertychange可以用on形式,也可以用attachEvent綁定
轉自:http://www.jb51.net/article/22615.htm
JavaScript鍵盤事件測試小結
測試環境
- 系統:Windows Vista Ultimate SP1
- 輸入法:谷歌拼音輸入法 1.2.30.71
- IE版本:ie6, ie7, ie8 beta1
- Firefox版本:2.0.0.16, 3.0.1
- Safari版本:3.1.2
- Opera版本:9.51
測試結果
輸入法未開啟時 | 輸入法開啟時 | |
---|---|---|
Firefox |
|
|
IE | 和Firefox基本一致,就是input改成propertychange. 注意: 2. 在ie中,僅字符鍵會觸發keypress. 這比firefox強。 3. 在ie中,Esc和Backspace功能一樣,這和firefox不同。在ie中,Delete鍵沒有改變值時,不會觸發propertychange. 5. 在ie中,Ctrl+C/X/V不會觸發keypress. 6. 在ie中,如果監聽的事件中YAHOO.log這種頁面輸出的語句時,會導致Ctrl+Z/Y失效。沒有輸入語句時不會。(這可以認為是IE的Bug) |
|
Safari | 大部分和Firefox一致。注意以下幾條: 2. 和IE類似,僅字符鍵會觸發keypress. 5. 和IE一致。 |
|
Opera | 大部分和Firefox一致。注意以下幾條: 2. 所有鍵都會觸發keypress. 4. 連續按下某鍵時,僅會連續觸發keypress. (這個處理比其它瀏覽器合理) 5. 多個keypress. |
和上面的瀏覽器都不同,僅在輸入完成時觸發input. |