Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的事件传播_Javascript_Jquery_Events_Event Propagation - Fatal编程技术网

Javascript中的事件传播

Javascript中的事件传播,javascript,jquery,events,event-propagation,Javascript,Jquery,Events,Event Propagation,如果我在另一个元素中嵌套了一个元素(html),并且两个元素都附加了一个单击处理程序,那么单击内部元素将执行其单击处理程序,然后跳转到父元素并执行其单击处理程序。我就是这样理解的 如果没有附加相同的事件,事件是否会在DOM树中冒泡?如果是,是否值得在每个处理程序的末尾放置一个event.stopPropagation()来停止此操作并加快速度?除非设置event.cancelBubble=true或使用event.stopPropagation(),否则事件几乎总是冒泡。不过,只有当你的某个事件

如果我在另一个元素中嵌套了一个元素(html),并且两个元素都附加了一个单击处理程序,那么单击内部元素将执行其单击处理程序,然后跳转到父元素并执行其单击处理程序。我就是这样理解的


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

除非设置event.cancelBubble=true或使用event.stopPropagation(),否则事件几乎总是冒泡。不过,只有当你的某个事件发生时,你才会意识到这一点 处理程序会被绊倒

请参阅,以获取出现气泡的事件列表。(注意:在HTML事件表中,cancelable是指event.preventDefault()或return false取消默认操作的有效性,而不是冒泡)

另请参见1.2.1基本流程,以了解事件传播的捕获阶段和冒泡阶段

编辑

表明通过停止传播可以提高性能,但不提供数据

建议浏览器应该针对冒泡行为进行优化,并表示应该没有明显的性能差异。同样没有数据

为提高事件处理性能提供了一种很好的技术,但没有直接讨论StopRopagation性能


最终,您必须分析差异,以便更好地了解站点的好处。

我认为浏览器已经对这种行为进行了很好的优化,因此在停止传播时,您将无法获得显著的性能提升(可能真正复杂的嵌套DOM结构除外)。如果您担心绩效和处理大量事件,您可能会对事件委派感兴趣


此外,您应该记住,您的代码应该保持可读性和自解释性
stopPropagation()
是一种用于特定目的的方法,因此在每种方法中使用它都会让人感到困惑。

谢谢。你知道一直停止传播是否会提高性能吗?我不知道。一般来说,冒泡是预期的行为,因此我怀疑浏览器会针对这种行为进行优化。我看看能找到什么。谢谢你的长篇大论。我会从你建议的链接开始做更多的挖掘。再次感谢。在任何方法中使用它都是我想要避免的,所以我完全同意。至于复杂的嵌套DOM,不幸的是,我有一个相当复杂的结构,这并不是因为组件艺术控件疯狂地在表中嵌套表。我在屏幕上显示100条记录时遇到了2.5秒的延迟。我从数据发送到浏览器的那一刻开始计时。这很可能是由于它为每个td和tr连接活动的方式。tr将调查活动授权。再次感谢您抽出时间。