如果我有一个元素 (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/