我正在與一位開發人員討論我們在iOS設備上使用網絡應用時遇到的問題。它大量使用事件和jQuery。我們目前有這樣的問題,即應用程序在使用一段時間後運行緩慢。從DOM中刪除的元素解除綁定事件
我的同事提出問題是我們綁定了特定元素的事件處理程序,例如,
$("div#id123").on("click", function(....){....});
而且,因爲我們這樣做,每當我們加載新的元素到DOM,這些事件處理程序,最終「污染」的瀏覽器,使其慢。
只要載入新元素,舊的元素就是完全從DOM到$("div#id456").remove()
d,直到它們可能再次加載(全新,沒有任何緩存)。
我不能反駁他,但我確信只要刪除舊元素,事件處理程序也會被瀏覽器刪除。畢竟,他爲什麼要保留它們?
他建議我重寫所有的處理程序有
$(document).on("click", "div.commonclass", function(....){...});
形式對文檔級別的事件處理程序,綁定到類的所有我們處理有共同的元素。
這對我來說意味着一些重大的改寫,我想避免在我看來,這不是我們問題的根本原因。
是否我對關於移除的元素的事件的假設是正確的?如果是這樣,我如何向我的同事展示重寫事件處理程序是不必要的浪費工作時間?
使用'.remove()'也可以刪除任何綁定的句柄。根據建議使用委派將避免有許多處理程序,具體取決於多少元素。所以我建議你也試試它。現在你的問題可能來自其他地方 –
使用.detach()而不是remove(),因爲.detach()充當刪除臨時但事件處理程序沒有刪除請嘗試它 –