簡體   English   中英

如何停止兩次觸發Keyup事件

[英]How to stop Keyup event from triggering twice

Console.log打印兩次。 我嘗試使用e.stopPropagation(),e.​​preventDefault()和.stop()。 這是行不通的。 console.log應該只觸發一次

$('html').keyup(function (e) {
    if (e.keyCode == 46) {
        console.log("delete press");
        e.stopPropagation();
        e.preventDefault();
    }
});

我前段時間也遇到過類似的問題。 我最終使用$.unbind()$.bind() 我將首先調用$.unbind()來刪除該事件可能已經綁定到該事件的所有回調函數。 然后,我將在事件上調用$.bind() ,以便它可以執行我想要的操作。

$('html').unbind('keyup');
$('html').bind('keyup', function (e) {

您可能需要對事件進行防抖。

您可以使用lodash類的lodash輕松完成此操作,或者,如果您想學習它的工作原理,可以自己lodash做。

function handler(e) {
    if (e.keyCode == 46) {
        console.log("delete press");
        e.stopPropagation();
        e.preventDefault();
    }
}
$('html').keyup(lodash.debounce(handler, 250));

250是要對事件進行反跳的毫秒數,請注意事件是如何包裝的。

可以在這里找到所有選項的文檔: https : //lodash.com/docs/4.17.11#debounce

使用off()分離事件也可以

 $('html').off('keyup').on('keyup',function (e) {
  if (e.keyCode == 46) {
    console.log("delete press");
    e.stopPropagation();
    e.preventDefault();
  }
});

要么

使用one()僅執行一次事件處理程序

$('html').one('keyup',function (e) {
if (e.keyCode == 46) {
    console.log("delete press");
    e.stopPropagation();
    e.preventDefault();
}

});

暫無
暫無

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

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