1、如果用戶按下鍵盤上的字符鍵時,順序為keydown -> keypress ->keyup。keydown、keypress事件在文本框發(fā)生變化之前被觸發(fā)的,而keypress事件是在文本框已經發(fā)生變化之后觸發(fā)的。如果用戶按下了一個字符鍵不放,就會重復觸發(fā)keydown和keypress事件,直到用戶松開該鍵為止。
2、如果用戶按下非字符鍵時,首先觸發(fā)keydown,然后觸發(fā)keyup事件。如果用戶按下了一個非字符鍵不放,就會重復觸發(fā)keydown事件,直到用戶松開該鍵為止。
3、在keyup事件中無法阻止瀏覽器默認事件,因為在keypress時,瀏覽器默認行為已經完成,即將文字輸入文本框(盡管這時還沒顯示),這個時候不管是preventDefault還是returnValue = false,都不能阻止在文本框中輸入文字的行為,如要阻止默認行為,必須在keydown或keypress時阻止。
4、發(fā)生keypress事件意味著按下的鍵會影響到屏幕中文本的顯示。在所有瀏覽器中,按下能夠插入或刪除字符的鍵都會觸發(fā)keypress事件;(JS高級教程是這樣寫的,與下方鏈接博客略有沖突。)按下其他鍵能否觸發(fā)此事件因瀏覽器而言。
???? event對象的charCode屬性,只有在keypress觸發(fā)時才包含值,且這個值是按下那個鍵所代表字符的ASCII編碼。所以要想以跨瀏覽器的方式取得編碼,必須首先檢測charCode屬性是否可用,如果不可用則使用keyCode。
關于其他keydown,keypress,keyup更細更深入得研究可以參考鍵盤事件keydown、keypress、keyup隨筆整理總結?