有一堆有關如何刪除所有「特殊」處理程序從要素問題(如的onclick)刪除所有處理程序,或從一個元素清除所有事件等從所有元素
- How to remove all Click event handlers in Jquery
- Jquery: how to release all event handlers, dom changes?
這個問題有點寬泛。我們在IE7和IE8下面的asp.net網站面臨着巨大的內存泄漏,並且縮小這些泄漏的一個調整是解除頁面上所有元素的所有事件。基本上這個:
$('*').off();
現在,我們正在努力提高應用程序的性能,毫不奇怪,這個特定的行是熱點之一。
所以,問題是:有沒有什麼方法可以更有效地達到相同的結果(明確地從文檔中的所有元素中刪除所有處理程序)?
不走的選擇:
- 「重新加載頁面」 - 內存泄漏保留這種方式。
- 「每次你附加處理時間,你將它存儲在陣列」 - 有太多這樣的地方
我在想的是使用一些jQuery的內部(甚至非公開API)利用附加的處理程序來檢測元素。但它略高於我目前使用jQuery的能力。如果有幫助,我們將針對jQuery 1.7.1。
我以前做過這個。我的解決方案是保留一個全局數組來存儲對元素的引用。所以每次我綁定一些東西的時候,我都會添加一個對數組的引用。然後,當我需要時,通過陣列循環並逐個解除綁定。它是一個乏味的解決方案。想知道更好的方法來做到這一點。 – AlexCheuk 2013-03-21 21:33:34
@AlexCheuk,這可能很麻煩。我希望我們可以遍歷所有使用jQuery的文件,並修改處理程序附件以將處理程序附加到某個數組中......但實際上,我們有一個長期生活的產品,其中的附件遍佈數百個文件。幾乎沒有自動化測試。即使沒有考慮到開發工作,我們的QA團隊也會殺了我們,如果我們這樣做的話:)需要一個全球解決方案,不幸的是,蠻力不是一種選擇。 – J0HN 2013-03-22 01:26:03