簡體   English   中英

JavaScript / jQuery:用於鍵盤導航的Keypress(無法正常運行的事件)

[英]JavaScript/jQuery: Keypress for keyboard navigation (event.which doesn't work)

處理key [Up | Down | Press]事件時,應該使用.which還是.keyCode? 我可以使用一些示例代碼來處理jQuery中三個鍵盤事件嗎? 沒有jQuery,您能做到嗎? 我希望它在每個瀏覽器中都能可靠運行。

更新資料

(event) handler: 奇怪的是,jQuery的event。哪個規范化對我的handleKey (event)處理程序不起作用:

// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
    event.which = event.charCode || event.keyCode;
}

(it's not setting event.which to the value in event.keyCode): 我在handleKey 標准化之前和之后都得到了這個(這不是將event.which設置為event.keyCode中的值):

  • event.which = 0
  • event.charCode = 0
  • event.keyCode = 40

instead. 但是,如果我改用handleKey ,則該代碼有效。 我認為這與按鍵與按鍵有關。 (event) handler. 該代碼適用於我的handleKey (事件)處理程序。

不幸的是,我需要使用按鍵 (而不是按鍵 ),因為我想使用箭頭鍵進行導航:如果用​​戶按住箭頭鍵,則會觸發一次 keydown事件,但每次插入都會觸發單獨的keypress事件字符)。

根據此頁面

event.which 。在keydownkeyup上的IE <9中未定義。

event.keyCode上是在壁虎(Seamonkey的,火狐)0 keypress用於返回一個字符鍵。

event.charCode只支持KeyDown和KEYUP由Internet Explorer(MAC)。

在JSFiddle上嘗試

請參考此線程有關您的問題。

通常,我經常主張使用.which,因為它可以讓您同時跟蹤charCodes和keyCodes。 內置於jQuery中的event 。以便規范化這些不同的方法。

您可以在此處找到有關keyCodes的更多信息。

jQuery規范化event.which (請參閱: api.jquery.com/event.which/ ),所以這就是您所需要的。

有關可綁定的keypress()的文檔,請參考jQuery API。 http://api.jquery.com/keypress/

另外,這里是使用jquery進行按鍵導航的一個很好的演練: http : //net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-keypress-navigation-using-jquery/

編輯:API的重要/更多相關行:

如果需要捕獲任何地方的按鍵(例如,在頁面上實現全局快捷鍵),則將此行為附加到文檔對象上很有用。 由於事件冒泡,除非明確停止,否則所有按鍵都會使DOM到達文檔對象。

為了確定輸入了哪個字符,我們可以檢查傳遞給處理函數的事件對象。 雖然瀏覽器使用不同的屬性來存儲此信息,但jQuery規范化了.which屬性,因此我們可以可靠地使用它來檢索字符代碼。

請注意,keydown和keyup提供了一個代碼,指示按下哪個鍵,而keypress指示輸入哪個字符。 例如,小寫的“ a”在按下和按下時將報告為65,但在按下時將報告為97。 所有事件均將大寫字母“ A”報告為65。 由於存在這種區別,在捕獲特殊的擊鍵(例如箭頭鍵)時,.keydown()或.keyup()是更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM