子元素可以通过stopPropagation()阻止向父元素冒泡,那么怎么只触发父元素的事件呢,例如点击body阻止页面的所有click事件,我用addEventListener绑定元素,然后将useCapture设置为true,可是不知道如何阻止捕获。
子元素可以通过stopPropagation()阻止向父元素冒泡,那么怎么只触发父元素的事件呢,例如点击body阻止页面的所有click事件,我用addEventListener绑定元素,然后将useCapture设置为true,可是不知道如何阻止捕获。
首先,冒泡的顺序是从鼠标直接点击的那个元素开始,一层一层往window
对象冒泡的。这是冒泡的顺序。
如果已经冒泡到了body
,那之前的那些元素的click委托
早就执行完毕了。
阻止捕获
这个词,我没听说过,这种事貌似不可能吧,而且我也刚搜了一下,没有结果。你只能阻止冒泡
,而且这个功能就够了,如果阻止捕获
都可以做到,这是不是太霸道了点。
然后给你提个解决方案吧:
虽然我还不理解你想干什么,不过你既然想禁用页面所有元素的点击事件,你可以这样做
在满足你的时间点或者其他条件的地方:
在body
根节点下
创建一个div
,样式自然是
width: 100%;
height: 100%;
position: absolute;
z-index: 100000; /* 只要保证不被其他元素覆盖即可 */
background: none;
然后如果必要,再给body
一个overflow: hidden;
这样你点什么都不行了~
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
5 回答757 阅读
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
事件捕获阶段是浏览器去查找到底是那个元素被点击了。从而定位到被点击的dom元素。如果你在浏览器捕获阶段就阻止事件往下传播的话,浏览器就不知道到底那个dom被点击了,也就不会有冒泡机制了。所以浏览器没有给开发者提供阻止捕获的方法。 要明白,冒泡机制是基于捕获来实现的。捕获是浏览器原生行为。