1

我有以下代码不在文档内准备好了吗?

$('a[href^="content/"]').live('click', function(event)
{
    event.preventDefault();
    ....

此代码位于结束正文标记的正上方。

如果我的 HTML 的正文包含具有匹配 href 的地址链接,那么即使在执行此代码时它们尚未在 DOM 中,它们是否也会获得点击?我对 .live 的工作方式有点困惑。我认为通常您不会在实际元素上使用 .live ,而是在将来要填充元素的包含块上使用。

4

2 回答 2

3

我认为通常您不会在实际元素上使用 .live ,而是在将来要填充元素的包含块上使用。

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


然而,从 jQuery 1.7 开始,各种事件注册方法被统一到.on()其中,根据参数注册常规事件和委托。对于现场活动,您只需在其上创建一个委托document

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

// live events
$('.foo').live('click', function(e) {}); // old
$(document).on('click', '.foo', function(e) {}); // new

// delegates
$('#container').delegate('.foo', 'click', function(e) {}); // old
$('#container').on('click', '.foo', function(e) {}); // new
于 2012-04-30T08:38:32.587 回答
0

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

您的代码相当于:

$(document).delegate('a[href^="content/"]', 'click', function(event) { ...

因此,该事件确实与文档元素相关联。

您使用包含块描述的内容与该方法无关live。它总是将事件连接到文档元素。您使用delegateoron方法将事件连接到包含元素。

于 2012-04-30T08:58:06.137 回答