【发布时间】:2020-12-06 17:34:14
【问题描述】:
我想使用 javascript 删除当前附加到键盘键的所有事件侦听器。我知道可以通过克隆和替换特定元素来生成 HTML 元素,但是如何为键执行此操作?
例如,在 Reddit 中按 Q 会打开下拉菜单,那么我该如何防止呢?
我尝试过但没有用的方法:
onkeydown = function(e){
if(e.key == 'q'){
e.preventDefault()
e.stopImmediatePropagation()
e.stopPropagation()
}
}
onkeyup = function(e){
if(e.key == 'q'){
e.preventDefault()
e.stopImmediatePropagation()
e.stopPropagation()
}
}
【问题讨论】:
-
您不能将事件附加到键盘的键上,事件总是附加到 DOM 元素(或
document或window)。请说明您最初是如何将“事件添加到键”的。或者,如果您正在编写扩展程序,那么我们需要知道目标页面是如何附加事件的。 -
我已调试,这是一个附加到文档的 keyup 事件
-
和
document.onkeyup=null不起作用 -
那么你必须尝试移除监听器。如果它是一个匿名函数,那么您无能为力,因为如果没有对实际函数的引用,就无法删除带有
addEventListener的侦听器。此外,onxxx侦听器是元素的属性,它们与使用addEventListener添加的侦听器(或内联侦听器,如果重要的话)没有连接。如果您无法获得对该函数的引用,那么您就不走运了,因为它可能不切实际,甚至可能在没有所述侦听器的情况下重建整个文档。 -
我通过在
addEventListener()中设置useCapture标志将其删除
标签: javascript html event-handling