鍵盤與文本事件

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的描述不準確。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對鍵盤事件的支持主要遵循DOM0級,雖然DOM3級為鍵盤事件制定了規范,但是并不是所有瀏覽器的支持的。為了提高網頁...
    Miss____Du閱讀 1,324評論 6 6
  • 一、鍵盤事件基礎 1、定義 keydown:按下鍵盤鍵 keypress:緊接著keydown事件觸發(只有按下字...
    07120665a058閱讀 50,789評論 5 33
  • Web 瀏覽器中可能發生的事件有很多類型。如前所述,不同的事件類型具有不同的信息,而 DOM3 級事件規定了以下幾...
    More_5897閱讀 966評論 1 0
  • 事件流 IE和Netscape開發團隊提出了完全相反的兩種事件流的概念,事件冒泡流和事件捕獲流。 事件冒泡 事件由...
    exialym閱讀 992評論 0 9
  • 總結: 鼠標事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,640評論 2 10