按下的是非字符鍵時
- 僅觸發
keydown與keyup事件,通過event.keyCode可以查詢按下的是什么鍵。 - 按下鍵按住不放會重復觸發
keydown事件,出於性能考慮有必要進行防抖處理或者進行其它限制。
按下的是字符鍵時
- 在
input輸入框中按下字符鍵,觸發keydown,keypress,textInput,keyup事件。 - 在
document按下字符鍵,觸發keydown,keypress,keyup事件。 keypress在用戶按下某個字符鍵時觸發,無論這個字符是否顯示。通過charCode屬性獲取按鍵字符對應的ASCII編碼,再通過String.fromCharCode()方法獲取輸入值。在DOM3事件中被廢棄,轉而推薦textInput事件。- 按下字符鍵不放會重復觸發
keydown與keypress。 textInput事件只能在輸入框中觸發,通過data屬性獲取輸入的字符。
使用中文輸入法時
-
在
document中與英文輸入法無區別 -
在輸入框中,每次按鍵會觸發
keyup事件兩次且兩次觸發的e.keyCode不一致,其觸發順序為keydown,keyup,keyup。 -
通過按鍵選中輸入法中的候選字符時,觸發順序為
keydown,textInput,keyup,keyup。 -
textInput事件的data屬性返回的只是編輯區域內的文本。通過點擊字符鍵1選取某個漢字時,e.data返回的是具體的漢字文本而不是字符1。
