2011-06-06 52 views
1

我想使用.live来确保我的元素响应点击事件,即使在ajax调用(在我的情况下,我使用$ .post),所以例如后我的ajax请致电我这样做:

$('.link').live({ 
    click: function() { 
     alert('testing'); 
    } 
}); 

它不起作用。只有当我切换到使用这样的正常点击事件:

$('.link').click(function() { 
    alert('testing); 
} 

它的工作原理。但事情是$ link只有在每个ajax调用后才出现给用户,并且是实际进行ajax调用的用户。因此,如果我使用正常的点击事件,它只会在第一次显示$ link的第一个ajax调用(我在第一个ajax调用之后绑定事件)后才会工作。

首次显示$ link后,用户首次点击后,它会在底部再次显示包含$ link的项目列表。但是,这次它不再工作了,因为我仍然只绑定click事件而不使用.live。

我该如何让.live工程,这将使链接每次点击N次后工作?

编辑:更改$列表以使用选择器。对于以前不清楚的信息抱歉。我实际上使用选择器来使用.live。我实际上试图提供'查看更多'功能。因此,在用户在文本框中输入内容后,搜索结果将显示(通过ajax),并在底部显示“查看更多”链接。当用户点击它时,更多的相关搜索结果将被添加到列表中,另一个“查看更多”链接将再次位于列表的底部。但是,这一次它不再工作了,因为我无法使用.live来处理它。

+0

明显的问题 - 但我想你已经检查过的jQuery的版本? .live版本仅适用于1.4.3及更高版本 – Prescott 2011-06-06 01:00:40

+1

您能向我们展示如何获得$ link的价值吗? – Steve 2011-06-06 01:01:55

+0

@Prescott我正在使用jQuery 1.6。1目前 – 2011-06-06 01:42:29

回答

0

我用事件冒泡来解决问题。我所做的,而不是使用.live(),我这样做:( 'linkParent ')

$('.linkParent').click(function(event) { 

    $tgt = $(event.target); 

    if ($tgt.attr('class')=='link') { alert('works now!'); } 

}); 

这样$(' 链接')始终是内部$和Ajax调用总是只加载$('。linkParent')中的内容。

+0

这就是'delegate'方法的作用,它是'live'方法的变体。如果可行,“live”或“delegate”也可以。 – Guffa 2011-06-06 12:36:34

0

您在指定live委托时使用选择器。例如:

$('.SomeClass').live(... 

这会将事件绑定到文档,它将检查事件的来源。如果原点匹配选择器,则会触发事件处理程序。

您必须在绑定live委托时使用选择器,不能使用任何其他遍历DOM的方法来查找元素,因为在事件发生时评估选择器,而不是委托绑定时。

+0

对不起,我不清楚的问题。编辑我的原始问题,使其更清晰 – 2011-06-06 01:49:15

1

,您可以尝试像我总是做这样:

$(".class").live("click", function() { 
    //Do something 
});