關於JavaScript鍵盤事件

來源:互聯網
上載者:User

在使用JavaScript做WEB鍵盤事件偵聽捕獲時,主要採用onkeypress、onkeydown、onkeyup三個事件進行出來。該三個事
件的執行順序如下:onkeydown -> onkeypress
->onkeyup。在一般情況下,採用三種鍵盤事件均可對鍵盤輸入進行有效響應。當在實際使用中,會發現這幾者有些不同的差別。
        onkeypress事件不能對系統功能鍵(例如:後退、刪除等,其中對中文IME不能有效響應)進行正常的響應,onkeydown和onkeyup均可以對系統功能鍵進行有效攔截,但事件截獲的位置不同,可以根據具體的情況選擇不同的鍵盤事件。

       
由於onkeypress不能對系統功能鍵進行捕獲,導致window.event對象的keyCode屬性和onkeydown,onkeyup鍵盤事
件中擷取的keyCode屬性不同,主要表現在onkeypress事件的keyCode對字母的大小寫敏感,而onkeydown、onkeyup事件
不敏感;onkeypress事件的keyCode無法區分主鍵盤上的數字鍵和付鍵盤數字鍵的,而onkeydown、onkeyup的keyCode對
主付鍵盤的數字鍵敏感。

註:在Maxthon瀏覽器中,onkeydown和onkeyup有連續響應兩次鍵盤事件的BUG,onkeydown不能正常地對F1~F12的功能鍵進行正常的截獲(onkeyup沒有發現該問題),具體原因不明。不知道以後是否會進行訂正。

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

       
鍵盤事件包括keydown、kepress和keyup三種,每次敲擊鍵盤都會(依次?)觸發這三種事件,其中keydown和keyup是比較低級的
接近於硬體的事件,通俗的理解是這兩個事件可以捕獲到你敲擊了鍵盤中某個鍵;而keypress是相對於字元層面的較為進階點的事件,這個事件能夠捕捉到
你鍵入了哪個字元。可以這樣理解,如果你敲擊了A鍵,keydown和keyup事件只是知道你敲擊了A鍵,它並不知道你敲的是大寫的A(你同步選取了
Shift鍵)還是敲的是小寫a,它是以"鍵"為單位,你敲入了大寫的A,它只是當成你敲下了shift和A兩個鍵而已,但是keypress可以捕捉到
你是敲入的大寫的A還是小寫a.

        在介紹Prototype中Event對象前先介紹一下瀏覽器中的事件模型,瀏覽器中的事件主要有HTML事件、滑鼠事件和鍵盤事件,前兩種事件比較好理解,這裡主要解釋一下鍵盤事件以及它在IE和firefox中的區別.

        還要理解一個概念是鍵盤中的鍵分為字元(可列印)鍵和功能鍵(不可列印),功能鍵包括Backspace, Enter,
Escape, the arrow keys, Page Up, Page Down, and F1 through F12 等

        下面說一下鍵盤事件的具體使用方法,

        鍵盤事件的event對象中包含一個keyCode屬性,IE中只有這一個屬性,當為keydown和keyup
事件是,keycode屬性工作表示你具體按下的鍵(也稱為virtual
keycode),當捕捉的是keypress事件時keyCode屬性指的是你鍵入的字元(character code)

       
在firefox中情況有些不同,event對象包含一個keyCode屬性和一個charCode屬性,keydown和keyup事件的時
候,keyCode表示的就是你具體按的鍵,charCode為0;當捕捉的是keypress事件時,keyCode為0,charCode指的是你按
下的字元

        當捕捉的是keypress事件時,當你按的是可列印字元時,keyCode為0,charCode指的是你按下的字元的索引值,當你按的是不可列印字元時,keyCode為按下的鍵的索引值,charCode為0

        注意:功能鍵不會觸發keypress事件,因為keypress對應的就是可列印的字元,但是有一點IE和FF
中的區別,你按下一個字元鍵的同步選取alt鍵,在IE中不觸發keypress事件,但是在ff中可觸發,我發現在IE中按下ctrl鍵的時候只有按下
q鍵會觸發事件其他的要麼不會觸發事件,要麼被瀏覽器IE自身捕獲了,例如你按下ctrl_A,全選某個東西,你按ctrl_S儲存檔案,但是在FF中就
好多了,事件都是先傳遞到網頁,再向外傳遞

        鑒於IE和FF中的區別,如果你比較懶的話,建議只使用keydow和keyup事件,這兩種事件的使用在IE和FF中基本上沒有區別,也不要捕獲ctrl_A等被瀏覽器定義為快速鍵的事件

        鍵盤事件event對象還有三個其他的屬性altKey, ctrlKey, and shiftKey 來判斷你按下一個鍵的時候是否按下了alt等鍵,這三個屬性使用比較簡單,三種事件都可以使用,也不存在ie和ff的相容性問題

      在Prototype中的Event中有如下屬性:

KEY_BACKSPACE: 8,
KEY_TAB: 9,
KEY_RETURN: 13,
KEY_ESC: 27,
KEY_LEFT: 37,
KEY_UP: 38,
KEY_RIGHT: 39,
KEY_DOWN: 40,
KEY_DELETE: 46,
KEY_HOME: 36,
KEY_END: 35,
KEY_PAGEUP: 33,
KEY_PAGEDOWN: 34,
       以及下面的方法:
  • element(event) :返回觸發事件的元素
  • isLeftClick(event) :判斷是否按下的左鍵
  • pointerX(event) :事件觸發時滑鼠的橫座標,對於非滑鼠事件,在ff中沒有此資訊,但在ie中有?
  • pointerY(event):事件觸發時滑鼠所在位置的縱座標
  • stop(event):阻止事件向上傳播和瀏覽器的預設處理方法
  • findElement(event, tagName) :找到觸發事件的元素的所有祖先元素中的tagName為tagName的一個元素
  • observe(element, name, observer, useCapture):註冊事件處理函數
  • stopObserving(element, name, observer, useCapture):撤銷註冊的事件
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.