首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获stopPropagation事件

如何捕获stopPropagation事件
EN

Stack Overflow用户
提问于 2015-02-11 12:11:51
回答 2查看 2.1K关注 0票数 5

例如,我们有一个带有onclick事件侦听器的链接的页面。但是处理程序制造了stopPropagation。如果click事件不再是泡泡,我该如何处理它呢?

例如:

代码语言:javascript
复制
document.addEventListener('click', function(e) {console.log(e);});
a.onclick = function(e) {e.stopPropagation();};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-11 13:36:54

DOM事件传播分为三个阶段:捕获阶段、目标阶段和气泡阶段。粗略地说,事件首先工作到目标,到达目标,然后返回。

默认情况下,事件处理程序在最后的气泡阶段附加。如果在第一个捕获阶段附加了一个单击事件侦听器,它将在前一个处理程序有机会调用stopPropagation之前运行。

有关更深入的解释,请参见this question

票数 8
EN

Stack Overflow用户

发布于 2022-11-23 11:47:51

简单的答案是,在添加事件侦听器**时,true**添加了第三个参数,

代码语言:javascript
复制
document.addEventListener('click', someFunction, true)

)将对文档中的所有单击调用someFunction,即使用户在一个元素中单击一个名为event.stopPropagation的单击处理程序时也是如此。

有选择

如果您已经将选项对象作为第三个参数传递,只需在其中包含capture: true

代码语言:javascript
复制
document.addEventListener('click', someFunction, { capture: true, ...someMoreOptions })

为什么?

像这样启用处理程序的useCapture模式意味着侦听器在事件的早期“捕获”阶段(从最外层元素开始,然后通过子元素向下传输)侦听,而不是后面的“冒泡”阶段(从最内部的元素开始,通过祖先返回气泡,是唯一的stopPropagation块)。

副作用

这也意味着应用此设置会改变时间:捕获阶段单击事件将发生在子元素或子元素中的任何类型的单击事件之前。

例如,在上面的函数中,如果用户单击页面上的一个按钮,附加到document捕获阶段的document将在任何附加到该按钮的处理程序之前被调用;而如果没有将user设置为true,则会期望在此之后调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28454062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档