Будет ли метод jquery empty () очищать обработчики событий, созданные не средствами jquery - PullRequest
11 голосов
/ 14 ноября 2011

У меня есть элемент с большим количеством дочерних элементов. Я хочу очистить содержимое этого элемента и заменить его новой структурой.

Дочерние элементы назначаются различным слушателям событий, и не все эти слушатели создаются с помощью метода jquery bind.

Если я использую пустой метод jquery для очистки элемента, он удалит все прослушиватели событий или он очистит только прослушиватели, созданные с помощью метода jquery bind?

Ответы [ 3 ]

13 голосов
/ 19 марта 2014

Как отметили несколько комментаторов, в документации jQuery говорится, что empty () действительно удаляет обработчики событий: http://api.jquery.com/empty/

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

3 голосов
/ 14 ноября 2011

Вы можете отменить привязку всех слушателей объекта с помощью .unbind () и оставить параметры пустыми

Если вы хотите удалить все дочерние элементы элемента.просто пользователь $ ("# parent"). children (). remove ();

с live () и die () методы, которые вы можете добавить обработчики событий для элементов, которые еще не существуют.с $ (". element"). live ("click", function () {}) добавляет функцию ко всем объектам .element, которые в настоящее время находятся в вашем HTML или те, которые будут добавлены в будущем.

0 голосов
/ 14 ноября 2011

это не очистит слушателей события. Но вы должны использовать слушатели этого события как live() событие, потому что вы динамически меняете DOM элементы.

например:

$('a').live('click', function(){
   // your stuff
});

// jQuery 1.7 требуется для следующего фрагмента кода

$(document).on('click', 'a', function(){
   // your stuff
});
...