Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何阻止Keyup事件触发两次_Javascript_Jquery - Fatal编程技术网

Javascript 如何阻止Keyup事件触发两次

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

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

你可能需要消除这一事件的影响

您可以使用类似于
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事件不会重复),这些是您无法通过编程方式修复的。不过,最后一句的翻译可能是正确的。