JQuery:Live <a>标签第二次部分工作

4
我有以下的jQuery代码:

我有以下的jQuery代码:

$("a[id*='Add_']").live('click', function() {
    //Get parentID to add to.
    var parentID = $(this).attr('id').substring(4);

    //Get div.
    var div = $("#CreateList");

    //Ajax call to refresh "CreateList" div with new unordered list.
    div.load("/AddUnit?ParentID=" + parentID);
});

基本上,div中包含了一个嵌套的无序列表,其中有几个"Add_#"链接。点击链接会使用ajax调用来重新创建带有新节点的列表。它清除了所有添加链接,但是它们会被ajax调用再次添加。这就是为什么我使用.live方法,以便新添加的“Add_#”链接仍然具有绑定。
在大多数情况下,这有效。如果我单击“Add_1”,则div将使用新信息刷新。如果我接着点击“Add_2”,那么它如预期一样工作。
我遇到问题的情况是,当我单击“Add_1”时,页面会刷新(并创建一个新的“Add_1”链接),然后我再次单击重新渲染的“Add_1”。它是相同的链接,但是它在ajax调用期间已被刷新。当我这样做时,javascript函数仍然被调用,但.load方法不起作用。任何想法为什么会发生这种情况?谢谢。

你确定添加操作正在使用正确的“Add_#” ID 方案重新创建吗?或者...加载根本没有触发吗? - Nick Craver
是的,相同的渲染组件用于最初呈现页面以及ajax调用。我在“div.load”行后面放了一行“alert(parentID);”,函数仍然被调用。每次仍然会调用该函数,但从未向“AddUnit”发送请求(使用fiddler进行确认)。 - Ocelot20
请注意,.live 不绑定到 <a> 元素本身,而是绑定到文档本身,因此似乎还发生了其他事情,就像尼克建议的那样(删除和添加 <a> 元素不应该影响事件处理程序是否被调用,除非 <a> 标签与 live 事件的选择器不匹配)。 - CalebD
1个回答

2

看起来结果被缓存了,为了解决这个问题,强制jQuery以不缓存的方式进行请求。在所有方法调用之前添加以下内容即可:

$.ajaxSetup({ cache: false });

您可以查看$.ajaxSetup()$.ajax()以了解详情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接