如何停止两次触发Keyup事件

时间:2019-01-09 06:45:26

标签: javascript jquery

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();
    }
});

3 个答案:

答案 0 :(得分:3)

我前段时间也遇到过类似的问题。我最终使用了$.unbind()$.bind()。我将首先调用$.unbind()来删除该事件可能已经绑定到该事件的所有回调函数。然后,我会在事件上致电$.bind(),以便它可以执行我想要的操作。

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

答案 1 :(得分:0)

您可能需要对事件进行防抖。

您可以使用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

答案 2 :(得分:0)

使用off()取消活动

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

OR

仅使用one()作为

执行一次事件处理程序
$('html').one('keyup',function (e) {
if (e.keyCode == 46) {
    console.log("delete press");
    e.stopPropagation();
    e.preventDefault();
}

});