2010-06-15 238 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的: