Очистка обработчиков в jQuery




Делал нагруженную ajax и jquery страницу и столкнулся с интересной проблемой. А обнаружилось случайно – просто заметил, что некоторые ajax-запросы посылаются несколько раз.

Немного понаблюдал за ситуацией и заметил что в таких случаях:

  • Некая часть страницы генерируется по ajax.
  • В этой странице тоже есть элементы, поведение которых программируется в jquery и может быть даже ajax.
  • Понятно, что скрипты этого поведения вставляются вместе с этой частью страницы
  • Всё в целом работает.

Но если потыкать мышками и повторить цикл вставки этой части страницы несколько раз то

  • Скрипт “накапливает” все методы обработки. По крайней мере каждый следующий раз каждый клик срабатывает два-три-итд раз
  • При этом сам HTML нормально вставлен один раз.

Куда копать? Какие слова гуглить? Как оказалось, нужно просто почитать матчасть!

Оказывается каждый раз обработчик добавляется к существующему. В таких случаях нужно очищать имеющиеся обработчики
Если обработчик задавался с помощью bind — используйте unbind, для live — die.
Делать это можно каждый раз перед определением обработчика.

1
2
3
4
5
6
    $(document).ready(function(){
		$('#selector').die('click');
        $('#selector').live('click',function(){
		.................
		}http://blogocms.ru/wp-admin/post-new.php?preview=true
	});

Так работает нормально

Посты по теме:

  1. jQuery. Вешаем два Datepicker на одной странице
  2. Шпаргалка jQuery. Подсветка, валидация, Ajax.
  3. Проверка Checked в Jquery

Категории jQuery |
автор: altesack / Среда, Август 24, 2011 / Comments Off

Комментирование закрыто.