如何阻止一个 dom 节点所有的点击事件

2020-07-13 18:24:39 +08:00
 sybb

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

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

<div id='v2ex'></div>

这个 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(只能阻止在这个方法后边绑定的) 都没达到阻止的效果。

2530 次点击
所在节点    JavaScript
10 条回复
coolcoffee
2020-07-13 18:28:50 +08:00
1. 直接 offEventListener("click")把事件都移除。
2. 在上面悬浮一个看不见的同尺寸元素挡着。
momocraft
2020-07-13 18:29:08 +08:00
在上一级 capture ?
xiangyuecn
2020-07-13 18:30:01 +08:00
研究一下 addEventListener 第三个参数

要我搞就暴力解决,干掉原来的 dom,替换成一个新的完全一样的 dom
AlphaTr
2020-07-13 18:57:09 +08:00
没啥副作用的话,暴力点用 CSS 干掉 `#v2ex {pointer-events: none;}`
VDimos
2020-07-13 19:13:07 +08:00
clone 一个元素然后 replace 掉
Rhianu
2020-07-13 19:15:54 +08:00
<div id='v2ex' style="pointer-events: none"></div> 就可以将该元素所有的事件失效
christin
2020-07-13 19:22:23 +08:00
maichael
2020-07-13 19:45:12 +08:00
重新克隆一个元素好一点。
zhouyg
2020-07-13 20:05:21 +08:00
pointer-events: none 这行 css 足矣
liuhuihao
2020-07-14 09:29:41 +08:00
pointer-events: none
+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX