簡體   English   中英

如何解除特定鍵的事件綁定

[英]How to unbind events for specific keys

我懷疑我正在使用的一些 jQuery 插件通過綁定特定事件來干擾我的鍵盤箭頭鍵按下。

假設我不在乎破壞他們正在做的任何事情,我怎么能解除所有事件的綁定,比如左右箭頭鍵按下?

如何調試或查看按鍵觸發的事件列表? (我不知道哪些代碼行當前正在處理按鍵操作,如果有的話)

您可以在不影響其他綁定按鍵事件的情況下解除綁定:

$(document).unbind("keypress.key37");
$(document).unbind("keypress.key39");

這稱為命名空間事件,即使用<event_name>.<namespace>標記特定綁定(在您的情況下,“keypress.key37 & keypress.key39”)。

如果當您將焦點放在頁面上的任何位置時觸發箭頭鍵,則事件處理程序可能綁定到窗口或文檔,如下所示解除綁定:

$(window).unbind('keydown');
$(document).unbind('keydown');

如果您只想為“向左”或“向右”箭頭鍵解除綁定事件,您可以像這樣停止事件:

$(window).bind('keydown', function(e){
    switch(e.keyCode) {
        case 37: // left arrow
            e.preventDefault;
            e.stopPropagation;
            break;
        case 39: // right arrow
            e.preventDefault;
            e.stopPropagation;
            break;
    }
});

我建議調試以找到這些事件的綁定位置(或者即使它們被綁定)。 如果這些與 jQuery 綁定,它們將可以通過 .data() 看到;

例如,在控制台中:

$('.suspected.element').data().events

如果關鍵事件確實是通過某個插件引起的,我會考慮修改事件的綁定,而不是添加解決方法。

function stopRKey(evt) {
      var evt = (evt) ? evt : ((event) ? event : null);
      var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement :null);
      if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}
document.onkeypress = stopRKey;

暫無
暫無

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

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