2010-06-15 186 views
2

我有一个数据表,按钮上点击某些值保存到数据库,而其他值被检索。我需要这个过程是连续的,但我只能在第一时间才能完成。jQuery ajax只能第一次工作

起初我使用.ajax().replaceWith()重写整个表,但因为这覆盖了DOM,所以它正在丢失与该表相关的事件。我不能使用.live(),因为我使用的是stopPropagation().live()由于事件冒泡而不支持它。我基本上能够将点击事件重新绑定到.ajax()回调中的表上,但第二次对按钮点击事件的调用却什么也没做。

我改变了代码使用.get()为ajax和.html()将结果放在表中(服务器端代码现在返回完整的表sans <table>标签)。我不再需要重新绑定到表格的点击事件,但后续点击按钮仍然不起作用。

最后,我将其更改为​​,但具有相同(非)结果。

“无所事事”我的意思是,虽然ajax调用正在按预期返回新的HTML,但它并未应用于表格。我确定它与改变DOM有关,但我认为,因为我只是覆盖表格内容而不是表格对象本身,它应该工作。显然我错过了一些东西;它是什么?

编辑:

HTML:

<table id="table1" class="mytable"> 
    <tr> 
     <td><span id="item1" class="myitem"></span></td> 
     <td><span id="item2" class="myitem"></span></td> 
    </tr> 
</table> 

<input id="Button1" type="button" value="Submit" /> 

的jQuery:

$("Button1").click(function() { 
    $("table1").load(
     "data.aspx", 
     function(data) { 
      //... 
     } 
    ); 
}); 
+1

这将是有帮助的一些代码片段,甚至一些源的例子,从之前与AJAX事件之后。你在这里有很多信息,很难跟踪你正在做什么。 – Shaded 2010-06-15 14:44:16

+0

您解释了*“无所事事”我的意思是,虽然ajax调用正在按预期返回新的HTML,但它并未应用于表*,所以这意味着您的Ajax调用成功了,这是DOM操作或使用innerHTML失败。 – 2010-06-15 14:49:32

+0

@Shaded:虽然问题最终并不是严格的jQuery,但我添加了一些我正在做的事情的示例代码。 – 2010-06-15 20:42:41

回答

2

我盯着这两个和一个半天,这使我确信我是做错了什么与jQuery,但通过反复试验和大量的警告语句,我终于发现了AJAX是每次都返回相同的结果。将服务器端脚本设置为不缓存(Response.Expires = 0)解决了该问题。

(而且,FWIW,我还在使用​​声明。)

+0

你可以举一个例子或多一点解释 – Lijo 2014-01-13 11:11:00

1

您需要加载新的内容后重新绑定你的事件处理程序。

3

使用.replaceWith方法只工作第一次,但使用的.html方法工作得很好,所有的时间。 JQuery的: