.live在ajax $ .post之后无法正常工作

时间:2011-06-06 00:56:33

标签: jquery

我正在尝试使用.live来确保我的元素即使在ajax调用之后也会响应click事件(在我的情况下我使用$ .post)所以例如在我的ajax调用之后我做这样:

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

它不起作用。只有当我将其切换为使用这样的普通点击事件时:

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

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

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

如何使.live工作,这将使链接在N次点击后每次都能正常工作?

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

3 个答案:

答案 0 :(得分:1)

你可以尝试,就像我一直这样:

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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

    $tgt = $(event.target);

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

});

$('。link')总是在 $('。linkParent')内,而ajax调用始终只在中加载内容$( 'linkParent')