【问题标题】:Remove all event listeners attached to a key using Javascript使用 Javascript 删除附加到键的所有事件侦听器
【发布时间】: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 元素(或 documentwindow)。请说明您最初是如何将“事件添加到键”的。或者,如果您正在编写扩展程序,那么我们需要知道目标页面是如何附加事件的。
  • 我已调试,这是一个附加到文档的 keyup 事件
  • document.onkeyup=null 不起作用
  • 那么你必须尝试移除监听器。如果它是一个匿名函数,那么您无能为力,因为如果没有对实际函数的引用,就无法删除带有addEventListener 的侦听器。此外,onxxx 侦听器是元素的属性,它们与使用addEventListener 添加的侦听器(或内联侦听器,如果重要的话)没有连接。如果您无法获得对该函数的引用,那么您就不走运了,因为它可能不切实际,甚至可能在没有所述侦听器的情况下重建整个文档。
  • 我通过在addEventListener() 中设置useCapture 标志将其删除

标签: javascript html event-handling


【解决方案1】:

通过在捕获阶段执行事件处理程序找到解决方法,即将useCapture设置为true。

window.addEventListener('keyup', function (e) {
    if(e.key == 'q'){
    e.stopImmediatePropagation()
  }
}, true); //useCapture

如果有更好的解决方案,请发表。

【讨论】:

  • 感谢上帝,这真的很有帮助!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多