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