2011-09-12 21 views
2

如果我使用jQuery的實時或委託函數來創建將插入DOM的未來元素的事件處理程序,那麼在從DOM中刪除這些元素之前我需要做任何事情,因此不會發生任何類型的內存泄漏?使用jquery live事件刪除元素會導致內存泄漏嗎?

如果這有所幫助,可能會通過jQuery的模板插件添加/刪除元素。

我還沒有找到任何有關這方面的確認,並希望確定。謝謝!

回答

2

號考慮方式live()works

處理程序傳遞給.live()從未綁定到一個元素;相反,.live()將特殊處理程序綁定到DOM樹的根。

有附加到DOM所有live()處理–一個single event handler function不管你通過live()或有多少元素單一處理器可以設想匹配多少處理器連接。

該函數負責確定是否已經冒出DOM的事件源自匹配先前通過調用live()註冊的選擇器的元素。

由於沒有事件處理程序實際附加到與提供給live()的選擇器相匹配的DOM元素,所以如果刪除了這些元素,則不會有內存泄漏。

請記住,當您使用jQuery刪除元素時,jQuery處理綁定事件處理程序的必要清理。如果你通過在容器上設置innerHTML來炸掉元素,唯一的辦法就是泄漏。

1

雖然我無法完全確認,但如果這導致內存泄漏,我會非常驚訝。

我認爲Live的工作方式是它附加到文檔,然後掃描文檔以查找事件匹配。

很確定它不會將事件附加到在運行時以$(".element").click的方式創建的元素上。