4

我有一个 JQuery 'on' 和 'live' 不执行相同的场景。也许有人可以指出原因。我在我的项目中使用 JQuery 1.7.2,在此版本中,“live”已替换为“on”。我在列表页面中使用以下代码。基本上,此页面有一个字母栏,用户可以单击它并加载具有该姓氏的所有客户端。我希望链接通过 ajax 执行。

代码:

$("a.listajax").on("click", function (e) {
    e.preventDefault();
    var url = $(this).attr("href");
    $("div.content").load(url + " div.content");
    return false;
});

这里的问题是,当我第一次加载页面并单击链接时,一切正常。该页面通过ajax加载。但是,在那之后,所有链接都失去了绑定,然后如果我点击任何链接,我就会加载整个页面。

我用“live”替换了“on”,链接开始表现完美,即使在随后的点击中也是如此。

我错过了什么?

4

2 回答 2

7

一个不是简单地替换.live.on

$("a.listajax").live('click', function(e))

相当于:

$(document).on('click', 'a.listajax', function(e))

重要的

如果你的所有.listajax锚点都有一个共同的祖先不会从 DOM 中删除,你应该使用它(可能最深的一个)而不是document; 这将提高性能。

于 2012-06-13T03:17:11.643 回答
1

这就是live(). 它在创建新的 DOM 元素时重新绑定它们。jQuery 的网站上有很多类似的问题,比如这个,因为它可能有点令人困惑。

根据jQuery 文档,您live()可以:

为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。

“...在未来”部分是关键,因为on() 没有那个.

于 2012-06-13T03:15:41.910 回答