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(只能阻止在这个方法后边绑定的) 都没达到阻止的效果。
1
coolcoffee 2020-07-13 18:28:50 +08:00
1. 直接 offEventListener("click")把事件都移除。
2. 在上面悬浮一个看不见的同尺寸元素挡着。 |
2
momocraft 2020-07-13 18:29:08 +08:00
在上一级 capture ?
|
3
xiangyuecn 2020-07-13 18:30:01 +08:00
研究一下 addEventListener 第三个参数
要我搞就暴力解决,干掉原来的 dom,替换成一个新的完全一样的 dom |
4
AlphaTr 2020-07-13 18:57:09 +08:00 1
没啥副作用的话,暴力点用 CSS 干掉 `#v2ex {pointer-events: none;}`
|
5
VDimos 2020-07-13 19:13:07 +08:00 via Android
clone 一个元素然后 replace 掉
|
6
Rhianu 2020-07-13 19:15:54 +08:00 1
<div id='v2ex' style="pointer-events: none"></div> 就可以将该元素所有的事件失效
|
7
christin 2020-07-13 19:22:23 +08:00 via iPhone
|
8
maichael 2020-07-13 19:45:12 +08:00
重新克隆一个元素好一点。
|
9
zhouyg 2020-07-13 20:05:21 +08:00
pointer-events: none 这行 css 足矣
|
10
liuhuihao 2020-07-14 09:29:41 +08:00
pointer-events: none
+1 |