2012-09-24 25 views
3

我有將其從服務器側生成html表:

  DataTable dt2 = new Claims_Service().ASO_MOD_Get_Nulls(); 
      myGridView.DataSource = dt2; 
      myGridView.DataBind(); 

該表具有行和每行中有一個按鈕。

在客戶端

我寫:

$(".myGridView").on('click', '.myButton', function() 
     { 
      ... 
     } 

現在可以說,我需要重新綁定在服務器端。 (重新綁定===完全回發,並重新生成頁面)

我應該使用jQuery remove功能,以釋放事件,並防止內存泄漏我重新綁定過嗎?

另外,請問你的回答將是不同的,如果我寫的:

$(".myGridView .myButton").on('click',function() 
+0

是重新綁定通過AJAX方法做了什麼?該類是否應用於正在被刪除/重新添加的元素? – tvanfosson

+0

@tvanfosson no。純服務器命令並重新生成html。我會寫在我的問題。 –

回答

1

這是沒有必要的,當你通過一個完整的POST重新加載頁面刪除處理程序或GET請求。無論如何,remove()將從DOM中移除元素,而不是簡單地移除事件處理程序。刪除要使用的事件處理程序off()

+0

我正在尋找文檔.... :) –

+0

@RoyiNamir - 是的,它也會刪除處理程序,當它從DOM中刪除元素,但主要功能是刪除元素。如果您只想刪除處理程序,請使用off()。 – tvanfosson

+0

整個問題是我從prev頁面不需要任何東西。爲什麼我不使用刪除? –

0

on將回調應用於任何.myButton元素,no matter when it is added to the page(它的作用與舊的live方法相同)。使用remove不會清理您的客戶端綁定。

您應該要麼use off要麼阻止原始綁定(如果重新綁定是通過頁面回發完成的)。

+0

_使用remove不會清理你的客戶端binding_:Remopve將清除元素+綁定。我爲什麼要使用它 –

+0

當你與'on'綁定時,'現在和將來'的每個元素都會將點擊事件綁定...這就是爲什麼remove不會進行適當的清理。當然,刪除會刪除元素,從而與這些元素相關聯的綁定,但絕對不會刪除對所有.myButton元素的綁定。 – mamoo

1

如果寫像這樣:

$(".myGridView").on('click', '.myButton', function() { /* your code */ }); 

內存泄漏是不是一個問題,因爲你是圖案DOM泡沫匹配到所有的「.myButton」 occurances。

$(".myGridView .myButton").on('click',function() { /* your code */ }); 

附着至所有indivual 「.myButton」 出現

+0

我認爲記憶韭菜CAN在第一種情況下會發生。關鍵在於縮短泡沫路徑。而不是氣泡頂部的文檔元素,它只是冒泡到.MyGridView .... –

+0

如果您使用「.remove()」銷燬「myGridView」,jQuery自行清理。正確? –

+0

是的。但是銷燬是通過郵寄回來完成的。問題是:我應該(在__dopostBack之前)需要清理什麼? –