JavaScript鍵盤事件測試小結lifesingerAugust 25th, 2008測試環境
- 系統:Windows Vista Ultimate SP1
- IME:Google拼音IME 1.2.30.71
- IE版本:ie6, ie7, ie8 beta1
- Firefox版本:2.0.0.16, 3.0.1
- Safari版本:3.1.2
- Opera版本:9.51
測試結果
|
IME未開啟時 |
IME開啟時 |
Firefox |
- 正常按下再放起A鍵,會依次觸發keydown, keypress, input, keyup
- 僅按下修飾鍵(Ctrl/Shift/Alt)時,不會觸發keypress. 注意:按下Esc, Insert, Tab, Pause, Left, Up, Enter等鍵時,也會觸發keypress. 小結:keypress在按下非字元鍵時,有些會觸發,有些不會觸發,具體瀏覽器還不同。
- 僅在輸入框的值有變化時,才會觸發input. 比如Backspace鍵會引起值的變化,因此會觸發input. 但是要注意:游標在輸入值最後面時,按下Delete鍵不會改變輸入值,但依舊會觸發input.
- 按住某鍵不放時,會連續觸發keydown. 當按下的是會觸發keypress的鍵(參考上面第2條)時候,還會連續觸發keypress. 同樣,如果按下的是會觸發input的鍵,也會連續觸發input.
- Ctrl+C/V/X快速鍵粘貼複製等操作時,會依次觸發keydown, keydown, keypress, input, keyup, keyup. 其中input僅在值有變化時才觸發(比如粘貼一張圖片到文字輸入框時,不會觸發input)。
- Ctrl+Z/Y操作時,和第5條規律一致。
- 通過滑鼠右鍵進行粘貼複製等操作時,僅會觸發input.
|
- IME中輸入第一個字元時,觸發keydown, keypress. 輸入過程中不會觸發鍵盤事件,輸入完成時,會觸發input, input, keyup.
- IME開啟時,輸入數字時,和IME未開啟時一致。
|
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) |
- IME中輸入第一個字元時,觸發keydown, keyup. 輸入過程中也會連續觸發keydown, keyup. 輸入完成時,觸發keydown, propertychange, keyup. (無論怎樣都不會觸發keypress)
- IME開啟時,輸入數字時,和IME未開啟時一樣,但不會觸發keypress.
|
Safari |
大部分和Firefox一致。注意以下幾條: 2. 和IE類似,僅字元鍵會觸發keypress. 5. 和IE一致。 |
- IME中輸入第一個字元時,觸發keydown, input, keyup. 輸入過程中會連續觸發keydown, input, input, keyup. 輸入完成時,觸發keydown, input, input, keyup. (和IE一樣,不會觸發keypress)
- IME開啟時,輸入數字時,和IE一樣,不會觸發keypress.
|
Opera |
大部分和Firefox一致。注意以下幾條: 2. 所有鍵都會觸發keypress. 4. 連續按下某鍵時,僅會連續觸發keypress. (這個處理比其它瀏覽器合理) 5. 多個keypress. |
和上面的瀏覽器都不同,僅在輸入完成時觸發input. |