2010-08-12 171 views
7

我是一個進入jquery/javascript開發的動作開發人員。我有一個關於事件處理程序和綁定/解除綁定的問題。JQuery清理事件處理程序

舉例來說,我有一個帶有onerror事件處理程序的img元素的div。如果我用新的替換那個div,我是否需要刪除綁定到img元素的eventhandler。由於img不再會在文檔中將瀏覽器足夠聰明地刪除它,否則我會導致內存泄漏?

從動作腳本發出我通常會嘗試不斷刪除舊的事件處理程序。那麼當我爲web瀏覽器編寫javascript時,我需要這麼做嗎?

事件處理程序添加$('imgElement').error(errorFunction);

+0

如何添加事件處理程序? – 2010-08-12 12:36:12

回答

10

如果你結合使用jQuery的事件只是調用舊元素.remove()取代它之前,還是.empty()如果你只是想將其清除,這兩種清理事件處理程序元素和它的孩子,或在t他的情況是.empty(),只是孩子。

如果您只是替換它,例如.html(content)泄漏內存,因爲任何處理程序或這些元素的數據將保留在$.cache對象上。

+2

我不知道.html(內容)會泄漏內存!謝謝! – Patricia 2010-08-13 14:02:44

+0

你確定嗎?查看jQuery源代碼,第203行:manipulation.js:「//刪除元素節點並防止內存泄漏」 – Phil 2010-09-10 13:56:52

+0

@ phil-如果您查看之前的代碼,您會看到有幾個條件可以確定是否該代碼執行:) SO聊天在第一次預覽中有相同的內存泄漏問題,這是原因。 – 2010-09-10 14:07:01

0

嘗試使用firequery,它是Firefox的插件,顯示所有活動的事件偵聽器和jquery.data()

我也好奇它是否是最好的做法解除綁定()事件......