Методы delegate и on

Последнее обновление: 1.11.2015

Метод delegate

Ранее я упоминал, что метод bind добавляет обработчики событий только к тем элементам, которые на момент его действия уже существуют в структуре DOM. При добавлении новых элементов, например, с помощью метода append их события не будут обрабатываться.

Но jQuery предоставляет специальный метод delegate, который позволяет создать зарегистрировать обработчики и для будущих элементов, которых еще не в структуре DOM. Этот метод имеет следующие варианты использования:

  • delegate('селектор','событие', обработчик_события): добавляет обработчик для события. Для фильтрации элементов, для которых добавляется обработчик, используется селектор.

  • delegate('селектор','событие', данные_события, обработчик_события): то же самое, что и в предыдущем случае, плюс параметр для передачи данных события в объект Event (e.data)

Применение метода delegate:

<button>Жми1</button>
<button>Жми2</button>

<script type="text/javascript">
$(function(){
	$('body').delegate('button','click', function(e){
		$(this).css('color', 'red');
		alert('Обработчик для кнопки: '+$(this).text());
	});
	$('body').append('<button>Жми3</button>');
});
</script>

Здесь для всех элементов button, находящихся в элементе body, добавляется обработчик нажатия. И несмотря на то, что уже после этого добавляется новая кнопка, для нее также будет срабатывать обработчик.

Также мы можем отменить регистрацию обработчика события с помощью метода undelegate:

$('body').undelegate('button','click');

Метод on

Метод on был введен в jQuery 1.7 и во многом является заменой методу delegate и имеет аналогичное действие. Он имеет похожие формы использования:

  • on('событие', 'селектор', обработчик_события)

  • on('событие', 'селектор', данные_события, обработчик_события)

По сути по сравнению с методом delegate в данном случае меняются лишь параметры селектора и события:

	$('body').on('click', 'button', function(e){
		$(this).css('color', 'red');
		alert('Обработчик для кнопки: '+$(this).text());
	});

Для отмены регистрации обработчиков события можно использовать метод off:

	// удаление обработчиков события click для кнопок
	$('body').off('click','button');
	// удаление всех обработчиков для элементов внутри тега body
	$('body').off();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850