уничтожит ли диалоговое окно jQuery какие-либо обработчики, прикрепленные к элементам внутри него? - PullRequest
6 голосов
/ 01 сентября 2010

Я заметил некоторые утечки памяти в приложении, которое я создаю, после некоторого перебора FF начнет использовать все больше и больше памяти (до 1 000 000 k).

Я провел некоторое исследование и обнаружил, что если я сделаю $(selector).html(some stuff) для замены содержимого чего-либо, то обработчики jQuery из элементов предыдущего содержимого не будут удалены и вызовут некоторые проблемы, я исправил всете.

вопрос, который у меня возникает, если я уничтожу диалог с $(mydialog).dialog('destroy');, будут ли удалены обработчики, которые были присоединены к различным элементам, которые были в этом диалоге?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Нет, они не будут удалены, сам элемент диалога будет возвращен в предыдущее состояние, элементы внутри не затрагиваются.

Сам виджет диалога, кнопки, строка заголовка, кнопка закрытия и т. Д. Очищены, но элемент, который вы превратили в диалоговое окно, не затронут и не очищен. Вам нужно либо .empty(), либо .remove() всего элемента для этого.

1 голос
/ 01 сентября 2010

Я не уверен, что удаление диалогового окна с помощью предоставленного метода удаляет любые содержащиеся обработчики событий, но вы всегда можете сделать:

$(selector).empty();

вместо:

$(selector).html('blahblah'); // or .html('');

ичто избавит от любых обработчиков событий, связанных с любыми замененными элементами, и, таким образом, избежит утечек памяти.

...