1、keydown
當用戶按下鍵盤上的任意鍵時觸發,而且如果按住不放的話,會重復觸發此事件。
是在文本框發生變化之前被觸發的,keydown事件中拿不到當前按下的鍵的值。但是可以通過e.keyCode來獲得當前按鍵的值。不過有兼容性問題。
keyCode屬性的值與ASCII碼中小寫字母或數字對應的編碼相同。
//html
<input type="text" name="input" id="myInput" value="1">
//js
document.getElementById('myInput').addEventListener('keydown',function(e){
console.log(e.type);
console.log(e.target.value);
console.log(e.keyCode);
})
2、keypress
當用戶按下鍵盤上的字符鍵時觸發,而且如果按住不放的話,會重復觸發此事件。按下功能鍵不會觸發。
在所有瀏覽器中,按下能夠插入或刪除字符的鍵都會觸發keypress事件。
與keydown一樣,可以通過e.keyCode獲得當前按下的鍵值。也可以通過charCode獲得當前按下的鍵所代表字符的ASCII編碼。charCode只有在發生keypress事件時才包含值,此時的keyCode通常等于0或者也可能等于所按鍵的鍵碼。
要想以跨瀏覽器的方式取得字符編碼,必須首先檢測charCode屬性是否可用,如果不可用則使用keyCode。
在取得了字符編碼之后,就可以用String.formCharCode()將其轉換成實際的字符。
if(typeof e.charCode == 'number'){
return e.charCode;
}else{
return e.keyCode;
}
3、keyup
當用戶釋放鍵盤上的鍵時觸發。
說明
在用戶按了一下鍵盤上的字符鍵時,首先會觸發keydown事件,然后緊跟著是keypress事件,最后會觸發keyup事件。其中,keydown和keypress都是在文本框發生變化之前被觸發的;而keyup事件則是在文本框已經發生變化之后被觸發的。如果用戶按下一個字符健不放,就會重復觸發keydown和keypress事件,走到用戶松開鍵為止。
如果用戶按下的是一個非字符鍵,那么首先會觸發keydown事件,然后就是keyup事件。如果按住這個非字符鍵不放,那么就會一直重復觸發keydown事件,走到用戶松開這個鍵,此時會觸發keyup事件。
textInput
此事件只有在能觸發keypress的情況下才會觸發,是對keypress的補充,用意是在將文本顯示給用戶之前更容易攔截文本。在文件插入文本框之前后觸發textInput事件。
目前兼容性不太好,firefox(50.1.0)不支持,chrome(版本 55.0.2883.95 (64-bit))、safari(版本 9.1.2)支持,其它瀏覽器未試過。
觸發順序(在支持此事件的瀏覽器中):
- keydown
- keypress
- textInput
- keyup
通過e.data獲取當前的按鍵值
備注
這是一篇學習《Javascrpt高級程序設計》(第3版)的學習筆記,之所以發出來是因為在網上查找textInput事件時看到一些文章對keypress的描述不準確。