Задать вопрос
@softshape

Как удалить «сиротские» обработчики событий jQuery?

Есть модальный диалог, содержимое в который подкачивается с сервера при его открытии. В содержимом может быть не только HTML, но и скрипты. Например, вот такой -

$(document).on('click', '.modal-content a.select', function(e) {
	e.preventDefault();
	var src = $(this).attr('href');  alert(src);
....
    });


При закрытии окна диалога его содержимое очищается - $('#dialog').html('');

Если открыть, закрыть и снова открыть окно диалога, то обработчик клика будет вызван два раза! alert(src) это позволяет увидеть. Если снова закрыть-открыть, то уже три раза, и так далее.

При том, что собственно сам код уничтожается, его привязка к обработчику 'click' остается и каждый раз добавляется снова.

Да, в jQuery есть detach(). Проблема в том, что окно диалога о его внутренней жизни ничего не знает и detach() вызвать не сможет. Есть ли другие способы удалить привязку к событию, когда его функция-обработчик физически удаляется из DOM?
  • Вопрос задан
  • 411 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Andry К ответам на вопрос (3)
@AndryG
$(document).on('click', '.modal-content a.select', function(e) {

Вы обработчик вешаете на документ и висеть он будет до перезагрузки страницы.
e.stopPropagation() останавливает выполнение, но память скрипт жрет.
Навешивайте обработчик на элемент, который удалится при закрытии модального окна.
Ответ написан