Авторизация

Функцция jQuery.live
0

Функцция jQuery.live

Опубликовал root в блоге jQuery 01 марта 2010, 06:43
Начиная с версии 1.3 в jQuery появилась функция live, которая является аналогом функции bind и так же служит для назначения событий всем элементам, которые соответствуют выражению заданному в селекторе jQuery.

Основное отличие функции jQuery.live от jQuery.bind состоит в том, что bind действует только на объекты, которые существовали на момент вызова функции. Для объектов созданных позднее необходимо запускать bind повторно.

Функция jQuery.live лишена этого недостатка и будучи запущена один раз позволяет назначить события не только на созданные объекты, но и на те объекты, которые появятся позже.

Для иллюстрации сказанного, приведу небольшой пример:


<body>
	<div class=clickme>
	  Click Here
	</div>


Для того, чтобы «оживить» данный пример добавим обработку события «click»:


$('.clickme').bind('click', function() {
// Обработчик события Click
});


Недостаток в том, что после того как будет добавлен дополнительный элемент, с тем же классом «clickme», созданный с помощью bind обработчик событий для него действовать не будет.


$('body').append('<div class=clickme>Click here too</div>'); 


Кому-то данное ограничение может показаться незначительным, но на самом деле это большая проблема. Ведь, для каждого нового элемента необходимо повторно назначать события, а это выливается в увеличение объема и сложности программы.

Появление новой функции jQuery.live значительно упрощает жизнь программиста и позволяет уменьшить сложность программы, а следовательно и риск ошибки.

Синтаксис функции аналогичен синтаксису команды bind:


.live(eventType, handler);


Поэтому единственное отличие между приведенным выше кодом для bind и кодом для live заключается в замене имени одной функции на другое:


$('.clickme').live('click', function() {
// Обработчик события Click
});


В дополнение хочу отметить, что начиная с версии jQuery 1.4.1 прототип функции live стал выглядеть иначе:

.live( eventType, eventData, handler )


EventData — это необязательный параметр, который предназначен для передачи в обработчик дополнительных данных.
Одновременно с этим изменением появилась возможность назначать несколько событий на один обработчик:


$('.clickme').live('mouseover mouseout', function() {
	if (event.type=='mouseover') {
		// обрабатываем mouseover
	}

	if (event.type=='mouseout') {
		// обрабатываем mouseout
	}

});


Думаю, что многие оценят полезность функции live и постепенно начнут переписывать свои программы на новый лад. Что касается меня, то процесс перехода уже начат.

Комментарии (2)

RSS свернуть / развернуть
Свернуть ветку
Отличная статья. Замена метода hover на live очень полезна. Единственное, в последнем примере в параметрах функции укажите 'event', т.е.:

('.clickme').live('mouseover mouseout', function(event) {

Ещё раз спасибо.
Свернуть ветку
Отличный метод, отличная статья!

Нажмите здесь, чтобы оставить комментарий (регистрация не требуется)

Ваше имя
Ваш e-mail (будет скрыто и используется только для отправки ответов на ваш комментарий)
Вы — гость, и вам запрещено использовать HTML-теги.
Введите цифры и буквы:

 

Прямой эфир

Гайка крепления ножа К 702 БКУ