对方式感到困惑。live使用jQuery

对方式感到困惑。live使用jQuery,jquery,Jquery,我有下面的代码没有在文档中准备好吗 $('a[href^="content/"]').live('click', function(event) { event.preventDefault(); .... 此代码位于end body标记的正上方 如果my HTML的正文包含带有匹配href的地址链接,那么在执行此代码时,即使它们还不在DOM中,它们是否也会附加click偶数?我有点搞不清楚。live是如何工作的。我想通常你不会使用。在一个实际的元素上生活,而是在你将来要用元素

我有下面的代码没有在文档中准备好吗

$('a[href^="content/"]').live('click', function(event)
{
    event.preventDefault();
    ....
此代码位于end body标记的正上方

如果my HTML的正文包含带有匹配href的地址链接,那么在执行此代码时,即使它们还不在DOM中,它们是否也会附加click偶数?我有点搞不清楚。live是如何工作的。我想通常你不会使用。在一个实际的元素上生活,而是在你将来要用元素填充的包含块上生活

我想通常你不会使用。在一个实际的元素上生活,而是在你将来要用元素填充的包含块上生活

代表们就是这样做的。然而,实时事件非常相似——它们只是将文档本身用作“包含块”。这样做的缺点是jQuery必须检查页面上发生的所有给定类型的事件。因此,如果可能的话,您应该始终使用委托(通常是可能的!)


但是,自jQuery1.7以来,各种事件注册方法已经统一到其中,根据参数注册常规事件和委托。对于实时事件,您只需在
文档
上创建一个委托即可

下面是一些关于注册live/delegate事件的旧/新方法的示例(我将省略常规方法,因为它们与
.bind()
类似,但与新函数名
.on()
类似):


live
方法的语法有点混乱,而且使用起来很棘手。这就是为什么它被更灵活的
delegate
方法所取代,最近也被
on
方法所取代

您的代码相当于:

$(document).delegate('a[href^="content/"]', 'click', function(event) { ...
因此,事件实际上连接到文档元素

使用
live
方法无法对包含块进行描述。它总是将事件连接到文档元素。您可以使用
delegate
on
方法将事件连接到包含的元素。

事实
live()
使用
文档
,因为委托也是其速度如此之慢的原因,所以您应该尽可能在最近的静态父元素上使用
delegate
(或
on
,在jQuery 1.7+)中。
$(document).delegate('a[href^="content/"]', 'click', function(event) { ...