2010-03-04 53 views
0

我有一個頁面,我使用ajax加載信息表。一旦表被加載,我使用jQuery來連接表的行上的一些事件處理程序。用jQuery替換內容會導致IE8內存泄漏嗎?

從該頁面可以讓用戶刷新該表格。我的jQuery代碼以刷新表看起來是這樣的:

$.post("/myurl", { id: 0}, 
     function (d) 
     { 
      $("tblWrapper").html(d); 

      //Wire events 
      $("table tr", $("tblWrapper")).click(function (e) { ... }); 
      ...etc 
     }, "text"); 

我發現,這樣做幾次後,頁面將非常slugishly當我嘗試做任何IE8滾動或動畫做出迴應。

我的問題是,我做錯了什麼,這使得它變得越來越慢?我可以在更換新的html和新的處理程序之前清理舊的html/event處理程序嗎?我曾以爲JS引擎可能會自動執行此操作。也許它的確如此,它只是慢慢地進行清理,我不知道。

我注意到IExplorer的CPU時間達到了50%。

我非常感謝任何幫助。

回答

0

我不知道這是否是問題或沒有,但你保持一遍又一遍添加相同的行?它可能會變慢,因爲表中的行數越來越多。

你可以做一些像$(「table tr」)。remove()來清除行。

+0

不,每次將tblWrapper的內容替換爲來自ajax調用的新html。但我不知道舊的事件處理程序是不是被清理乾淨,或者我在某處保留對jquery對象的引用。我希望有這種類型的情況出現,我可以按照這種方式來防止這個問題。 – user169867 2010-03-04 21:45:19

+0

我會嘗試在重新填充內容之前先使用.remove()函數刪除現有的行。這將刪除所有處理程序:http://api.jquery.com/remove/ – mdm20 2010-03-04 22:16:39

+0

確實聽起來很有希望。我會給它一個鏡頭併發回。 – user169867 2010-03-05 00:20:46