技术解析

如何阻止一个 dom 节点所有的点击事件
0
1975-03-01 23:28:34
idczone

chrome 插件里涉及到阻止元素事件的问题,比如:

在插件里监听到了现在鼠标点击了一个 DIV 标签 v2ex

这个 V2EX 可能有多个 click 事件监听,比如:

  document.getElementById('v2ex').addEventListener('click', () => {
    console.log('click 1')
  })
  document.getElementById('v2ex').addEventListener('click', (e) => {
    e.stopImmediatePropagation()
    console.log('click 2')
  })
  document.getElementById('v2ex').addEventListener('click', (e) => {
    e.stopImmediatePropagation()
    console.log('click 3')
  })

怎么让那些绑定和监听全部不执行呢???

注:试过 preventDefault 、stopImmediatePropagation(只能阻止在这个方法后边绑定的) 都没达到阻止的效果。


1. 直接 offEventListener("click")把事件都移除。
2. 在上面悬浮一个看不见的同尺寸元素挡着。

在上一级 capture ?

研究一下 addEventListener 第三个参数
要我搞就暴力解决,干掉原来的 dom,替换成一个新的完全一样的 dom

没啥副作用的话,暴力点用 CSS 干掉 `{pointer-events: none;}`

clone 一个元素然后 replace 掉

就可以将该元素所有的事件失效

https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/removeEventListener

重新克隆一个元素好一点。

pointer-events: none 这行 css 足矣

pointer-events: none
+1

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服