[我编写了一个示例JavaScript程序来演示jQuery函数click
,delegate
和live
令人困惑的事件冒泡行为。
这里是demo page。
对于每个功能,包装器中都有一个wrapper和click链接,它们都已向click事件函数注册。
我注意到
stopPropagation
和live
中使用delegate
不会阻止事件冒泡live
和delegate
中,首先触发包装器中的click事件,然后触发click link。但是,对于click
功能,此顺序相反。谁能解释这两种现象?
该示例使用的是jQuery 1.6.4,但是您可以调整版本。
[开始时,live is deprecated支持jQuery 1.7+中的on和delegate。我现在就停止使用live
,而不是以后停止使用。上面链接的文档实际上非常有用,并且在解释这些功能如何工作方面做得很好。
代理和直播都依靠冒泡。它们与点击有何不同。该事件使他们大吃一惊。代表优于实时,因为您告诉它监视特定的父级,而实时则一直冒泡直至文档级别。非常贵。
jQuery文档值得在这里引用:
因为.live()方法一旦将事件传播到文件顶部,无法停止传播现场活动。同样,.delegate()处理的事件将传播委托给它们的元素;绑定的事件处理程序DOM树中它下方的任何元素都将已经执行到委托事件处理程序被调用时。这些处理程序因此,可能会阻止委托处理程序被触发调用event.stopPropagation()或返回false。
如果您了解live和委托的实现,那么您会了解这种差异的原因。实时和委托不以某种方式附加到元素上,因为在绑定时该元素不存在,它们分别附加到根或特定的父对象上,因此是不同的。并且它们利用事件冒泡,以便当事件从子级到根级或特定父级冒泡时,它将针对新添加的元素执行该事件,请参阅此博客条目以获取有关以下内容的详细视图:
http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/