jQuery: удаляются ли обработчики событий из объектов, если они удаляются из DOM с помощью html () - PullRequest
8 голосов
/ 01 апреля 2011

Я обеспокоен утечками памяти в моем приложении, так как я часто использую метод jquery html () для замены содержимого в DOM. Я просто хочу убедиться, что ни один из этих слушателей событий не будет зависать в памяти браузера.

Я искал документы jquery без четкого ответа. Кто-нибудь знает?

Спасибо, ребята!

Ответы [ 2 ]

5 голосов
/ 01 апреля 2011

Да, они есть.

Если вы используете jQuerys .html(), он позаботится о вас.Что касается источника jQuery, эта строка вызывается:

jQuery.cleanData( this[i].getElementsByTagName("*") );

, которая эффективно очищает все данные и события .Это, конечно, не сработает, если вы явно перезаписываете свойство DOMnodes innerHTML.

1 голос
/ 01 апреля 2011

Кажется, используя связывание в jQuery, вы можете лучше контролировать события и обработчики, например, в этом примере из http://api.jquery.com/unbind/

var myHandlers = {};    

myHandlers.handler = function() {
    alert('The quick brown fox jumps over the lazy dog.');
};
$('#foo').bind('click', handler);
$('#foo').unbind('click', handler);

delete(myHandlers.handler);

Но я не знаю, возможно ли это контролировать с помощью обычного синтаксиса jQuery $ ('a'). Click (), поскольку все, что возвращается, это объект jQuery и никаких ссылок на обработчики или события.

С этим вопросом связано переполнение стека:

утечки памяти javascript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...