javascript - Javascript 中的事件传播

标签 javascript jquery events event-propagation

如果我有一个元素 (html) 嵌套在另一个元素中,并且它们都附加了点击处理程序,则单击内部元素会执行其点击处理程序,然后向上冒泡到父元素并执行其点击处理程序。我是这么理解的。

如果没有附加相同的事件,事件是否会在 DOM 树中冒泡?如果是,是否值得在每个处理程序的末尾放置一个 event.stopPropagation() 来停止它并加快速度?

最佳答案

除非设置了 event.cancelBubble=true 或使用了 event.stopPropagation(),否则事件几乎总是冒泡。但是,您只知道它,当您的事件之一 处理程序被绊倒。

参见 http://en.wikipedia.org/wiki/DOM_events对于冒泡的事件列表。 (注:HTML事件表中cancelable是指event.preventDefault()生效或返回false取消默认 Action ,不是冒泡)

另见 http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow ,特别是 1.2.1 基本流程,以了解事件传播的捕获阶段和冒泡阶段。

编辑

http://mark-story.com/posts/view/speed-up-javascript-event-handling-with-event-delegation-and-bubbling表明通过停止传播但不提供数据来提高性能。

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9af0aa4216a8046建议浏览器应该针对冒泡行为进行优化,并表示应该没有显着的性能差异。再次没有数据。

http://developer.yahoo.com/performance/rules.html#events提供了一种提高事件处理性能的好方法,但没有直接讨论 stopPropagation 性能。

最终,您必须描述差异,才能很好地了解网站的优势。

关于javascript - Javascript 中的事件传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522941/

相关文章:

silverlight - 为什么我的 Silverlight UIElements 没有 OnPreview 事件?

javascript - jwplayer js api事件获取玩家索引

javascript - 向元素添加另一个类,但作为第一类

jquery - 使用 Snap.svg 设置边界框以在悬停时为分组 SVG 中的元素设置动画

Javascript - 如何在带有回调的 for 循环中使用迭代器

Javascript e.pageX 未定义

javascript - 从子元素获取文档对象

excel - 未触发 VBA 组合框更改事件

javascript - div 可见性不断切换

javascript - 使用范围 slider 设置不透明度