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


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

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

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

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

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

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

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

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

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