在JavaScript事件中,冒泡机制比捕获机制更好吗?

5
在jQuery中,事件处理程序的默认时间是冒泡时间。这样做有什么优势吗?捕获比冒泡快吗?

如果您不解释您的用例,那么这个问题就没有意义。它们是不同的。也许您只是想问有什么区别? - Ruan Mendes
@JuanMendes 没有具体的情况,我只是学习事件并发现捕获很早。所以我想知道为什么冒泡是默认值。 - Hank
1个回答

12

气泡是否比捕获更好?

不是。它也不会更差。只是不同。

捕获比气泡更快吗?

这取决于你对“更快”的定义。在捕获阶段添加的事件监听器将在气泡阶段之前触发,但所有监听器都将在浏览器重新绘制之前完成,因此使用其中任何一种并没有真正的性能优势。

但请注意以下几点不同:

并非所有事件都会冒泡。focusload 这样的事件不会冒泡。这意味着,如果您将非捕获事件侦听器附加到元素的非冒泡事件上,则可以确保仅该元素触发了该事件,而不是其子元素之一。相反,您可以使用捕获阶段附加单个事件侦听器,并动态获取哪个元素触发了它,并减少监听器数量并响应未来元素。

捕获阶段可以在事件到达子元素之前停止其传播。通常会在事件冒泡到父元素之前取消事件,但是在事件到达子元素之前取消事件可能也很有用,在这种情况下,捕获阶段确实具有优势(或劣势)。

总之:

选择适当的捕获模式以实现所需的功能。在大多数情况下,两者都没有真正的性能优势,即使有,也只是微观优化。


使用 focusin 处理冒泡的焦点事件。 - Ruan Mendes
2
@JuanMendes 在Firefox中无法工作。请参见此问题:https://bugzilla.mozilla.org/show_bug.cgi?id=687787 - Alexander O'Mara
是的,我忘记了那个。 - Ruan Mendes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接