jQuery中的bind()和live()与事件传播之间的差异

时间:2013-12-26 04:44:23

标签: javascript-events event-handling jquery

我知道jQuery中的live()可用于将事件绑定到绑定时不存在的元素。 但是,bind()方法和live()之间的事件传播也存在差异。 以下是jQuery in action book中的摘录:

“首先,要认识到实时事件不是本机”正常“事件。当发生诸如点击之类的事件时,它会通过DOM元素向上传播,如本章前面所述,调用已建立的任何事件处理程序一旦事件到达用于创建调用live()的包装集的上下文(通常是文档),上下文将检查自身内与实时选择器匹配的元素。实时事件处理程序在匹配的任何元素上触发,此触发事件不会传播。“

任何人都可以帮我理解这意味着什么吗?

1 个答案:

答案 0 :(得分:0)

想一想这个场景:

我有几个<p>元素。

$('p').bind('click', function(){...});

添加一些额外的<p>(使用get()html(),任何内容)

新的<p>没有任何约束!!

当然,由于在步骤2中执行<p>时新的$('p')...不存在,因此它没有将事件处理程序绑定到它们。

现在,如果你这样做:

我有几个<p>元素。

$('p').live('click', function(){...});

添加一些额外的<p>(使用get()html(),任何内容)

新的<p>确实有绑定!!

注意 jQuery自1.7以来已弃用live(),而是使用on()