Javascript 如何阻止Keyup事件触发两次
Console.log打印两次。我尝试过使用e.stopPropagation()、e.preventDefault()和.stop()。它不起作用。 console.log应该只触发一次Javascript 如何阻止Keyup事件触发两次,javascript,jquery,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();
$('html').keyup(function (e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
});
你可能需要消除这一事件的影响 您可以使用类似于
lodash
的工具轻松完成此操作,如果您想了解它的工作原理,也可以使用自己的工具
function handler(e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
}
$('html').keyup(lodash.debounce(handler, 250));
250这里是事件去抖动的毫秒数,请注意事件是如何包装的
所有选项的文档都可以在这里找到:您可能需要取消该事件的影响 您可以使用类似于
lodash
的工具轻松完成此操作,如果您想了解它的工作原理,也可以使用自己的工具
function handler(e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
}
$('html').keyup(lodash.debounce(handler, 250));
250这里是事件去抖动的毫秒数,请注意事件是如何包装的
所有选项的文档都可以在这里找到:我不久前遇到过类似的问题。最后我使用了
$.unbind()
和$.bind()
。我将首先调用$.unbind()
,删除所有可能已绑定到事件的事件回调函数。然后,我将对事件调用$.bind()
,以便它可以执行我希望它执行的操作
$('html').unbind('keyup');
$('html').bind('keyup', function (e) {
不久前我也有类似的问题。最后我使用了
$.unbind()
和$.bind()
。我将首先调用$.unbind()
,删除所有可能已绑定到事件的事件回调函数。然后,我将对事件调用$.bind()
,以便它可以执行我希望它执行的操作
$('html').unbind('keyup');
$('html').bind('keyup', function (e) {
使用
off()
分离事件也有效
$('html').off('keyup').on('keyup',function (e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
});
或
使用one()
as只执行一次事件处理程序
$('html').one('keyup',function (e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
})) 使用
off()
分离事件也有效
$('html').off('keyup').on('keyup',function (e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
});
或
使用one()
as只执行一次事件处理程序
$('html').one('keyup',function (e) {
if (e.keyCode == 46) {
console.log("delete press");
e.stopPropagation();
e.preventDefault();
}
})) “console.log将只触发一次”那么您如何知道事件被触发两次?此外,停止HTML元素上的事件传播也没有任何作用,事件无论如何也不能从文档中冒泡出来。信息不足。发布的代码不能像您描述的那样运行。您可以尝试.unbind然后.bind吗。可能是事件已绑定两次?“console.log将仅触发一次”那么您如何知道事件已触发两次?此外,停止HTML元素上的事件传播也没有任何作用,事件无论如何也不能从文档中冒泡出来。信息不足。发布的代码不能像您描述的那样运行。您可以尝试.unbind然后.bind吗。可能是事件绑定了两次?OP提供的代码不会触发两次,还缺少其他内容。这里的问题是,这个问题不代表任何可复制的问题,请不要在答案中进行推测。@Teemu硬件触发的事件触发两次,需要去盎司不是推测,这是一个常见的问题。@Durga他的英语需要一点帮助,如果你读了问题,他说控制台日志触发两次,最后一行他是说他只想让它触发一次。那么实际的硬件问题很可能是键盘上的手指太重,或者键盘脏(keyup事件不会重复),这些是您无法通过编程方式修复的。不过,最后一句的翻译可能是正确的。OP提供的代码不会触发两次,还缺少其他内容。这里的问题是,这个问题并不代表任何可复制的问题,请不要对答案进行猜测。@Teemu硬件触发事件触发两次,需要去盎司不是猜测,这是一个常见的问题。@Durga他的英语需要一点帮助,如果你读了问题,他说控制台日志触发两次,最后一行他是说他只想让它触发一次。那么实际的硬件问题很可能是键盘上的手指太重,或者键盘脏(keyup事件不会重复),这些是您无法通过编程方式修复的。不过,最后一句的翻译可能是正确的。