为什么“单击”,“委托”和“实时”在使用jQuery进行事件冒泡方面表现不同?

问题描述 投票:1回答:2

[我编写了一个示例JavaScript程序来演示jQuery函数clickdelegatelive令人困惑的事件冒泡行为。

这里是demo page

对于每个功能,包装器中都有一个wrapperclick链接,它们都已向click事件函数注册。

我注意到

  1. stopPropagationlive中使用delegate不会阻止事件冒泡
  2. livedelegate中,首先触发包装器中的click事件,然后触发click link。但是,对于click功能,此顺序相反。

谁能解释这两种现象?

该示例使用的是jQuery 1.6.4,但是您可以调整版本。

jquery jquery-events event-bubbling
2个回答
2
投票

[开始时,live is deprecated支持jQuery 1.7+中的ondelegate。我现在就停止使用live,而不是以后停止使用。上面链接的文档实际上非常有用,并且在解释这些功能如何工作方面做得很好。

代理和直播都依靠冒泡。它们与点击有何不同。该事件使他们大吃一惊。代表优于实时,因为您告诉它监视特定的父级,而实时则一直冒泡直至文档级别。非常贵。

jQuery文档值得在这里引用:

因为.live()方法一旦将事件传播到文件顶部,无法停止传播现场活动。同样,.delegate()处理的事件将传播委托给它们的元素;绑定的事件处理程序DOM树中它下方的任何元素都将已经执行到委托事件处理程序被调用时。这些处理程序因此,可能会阻止委托处理程序被触发调用event.stopPropagation()或返回false。


1
投票

如果您了解live和委托的实现,那么您会了解这种差异的原因。实时和委托不以某种方式附加到元素上,因为在绑定时该元素不存在,它们分别附加到根或特定的父对象上,因此是不同的。并且它们利用事件冒泡,以便当事件从子级到根级或特定父级冒泡时,它将针对新添加的元素执行该事件,请参阅此博客条目以获取有关以下内容的详细视图:

http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/

© www.soinside.com 2019 - 2024. All rights reserved.