.live( events, handler )Возвращает: jQueryверсия устарела: 1.7, удалена: 1.9
Описание: Прикрепить обработчик событий для всех элементов, соответствующих текущему селектору, сейчас и в будущем.
-
версия добавлена: 1.3.live( events, handler )
- eventsТип: СтрокаСтрока, содержащая тип JavaScript-события, например, "click" или "keydown". Начиная с jQuery 1.4, строка может содержать несколько типов событий, разделенных пробелами, или имена пользовательских событий.
- handlerФункция, которая выполняется в момент срабатывания события.
-
-
версия добавлена: 1.4.live( events [, data ], handler )
- eventsТип: СтрокаСтрока, содержащая тип JavaScript-события, например, "click" или "keydown". Начиная с jQuery 1.4, строка может содержать несколько типов событий, разделенных пробелами, или имена пользовательских событий.
- dataТип: ОбъектОбъект, содержащий данные, которые будут переданы обработчику события.
- handlerФункция, которая выполняется в момент срабатывания события.
-
-
версия добавлена: 1.4.3.live( events )
- eventsТип: ОбъектОбъект, содержащий один или несколько типов JavaScript-событий и функций для их выполнения.
-
Примечание: Этот API был удален в jQuery 1.9; используйте вместо него on().
Этот метод предоставляет способ прикрепить обработчики событий с делегированием к элементу document страницы, что упрощает использование обработчиков событий при динамическом добавлении содержимого на страницу. Подробнее о прямых и делегированных событиях см. в методе .on().
Переписать метод .live() в терминах его преемников довольно просто; это шаблоны для эквивалентных вызовов всех трёх методов присоединения обработчиков событий:
$( selector ).live( events, data, handler ); // jQuery 1.3+ $( document ).delegate( selector, events, data, handler ); // jQuery 1.4.3+ $( document ).on( events, selector, data, handler ); // jQuery 1.7+
Аргумент events может быть либо списком, разделенным пробелами, типов событий и необязательных имен пространств имён, либо объектом с именами событий в качестве строк и обработчиками. Аргумент data является необязательным и может быть опущен. Например, следующие три вызова метода функционально эквивалентны (но см. ниже более эффективные и производительные способы прикрепления обработчиков делегированных событий):
$( "a.offsite" ).live( "click", function() {
alert( "Goodbye!" ); // jQuery 1.3+
});
$( document ).delegate( "a.offsite", "click", function() {
alert( "Goodbye!" ); // jQuery 1.4.3+
});
$( document ).on( "click", "a.offsite", function() {
alert( "Goodbye!" ); // jQuery 1.7+
}); Использование метода .live() больше не рекомендуется, так как более поздние версии jQuery предлагают лучшие методы, не имеющие его недостатков. В частности, при использовании .live() возникают следующие проблемы:
- jQuery пытается получить элементы, указанные селектором, перед вызовом метода
.live(), что может быть затратно по времени для больших документов. - Цепные методы не поддерживаются. Например,
$( "a" ).find( ".offsite, .external" ).live( ... );не является допустимым и не работает как ожидается. - Так как все события
.live()прикрепляются к элементуdocument, события проходят по самому длинному и медленному пути перед обработкой. - На мобильных устройствах iOS (iPhone, iPad и iPod Touch) событие
clickне поднимается до тела документа для большинства элементов и не может использоваться с.live()без применения одного из следующих обходных путей:- Используйте нативные кликабельные элементы, такие как
aилиbutton, так как оба эти события поднимаются доdocument. - Используйте
.on()или.delegate(), прикреплённые к элементу ниже уровняdocument.body, так как мобильные iOS события поднимаются внутри тела. - Примените CSS-стиль
cursor:pointerк элементу, который должен поднимать клики (или родительский, включаяdocument.documentElement). Однако имейте в виду, что это отключит копирование/вставку в элементе и вызовет его выделение при касании.
- Используйте нативные кликабельные элементы, такие как
- Вызов
event.stopPropagation()в обработчике события неэффективен для остановки обработчиков событий, прикреплённых ниже в документе; событие уже распространилось доdocument. - Метод
.live()взаимодействует с другими методами событий таким образом, который может быть неожиданным, например,$( document ).off( "click" )удаляет все обработчики кликов, прикреплённые любым вызовом.live()!
Для страниц, всё ещё использующих .live(), этот список версионных различий может быть полезен:
- До jQuery 1.7, чтобы остановить дальнейшее выполнение обработчиков после привязки одного с помощью
.live(), обработчик должен вернутьfalse. Вызов.stopPropagation()этого не сделает. - Начиная с jQuery 1.4 метод
.live()поддерживает пользовательские события, а также все JavaScript-события, которые поднимаются. Он также поддерживает определённые события, которые не поднимаются, включаяchange,submit,focusиblur. - В jQuery 1.3.x могли быть привязаны только следующие JavaScript-события:
click,dblclick,keydown,keypress,keyup,mousedown,mousemove,mouseout,mouseover, иmouseup.
Примеры:
Отменить действие по умолчанию и предотвратить его распространение, вернув false.
$( "a" ).live( "click", function() {
return false;
}); Отменить только действие по умолчанию, используя метод preventDefault.
$( "a" ).live( "click", function( event ) {
event.preventDefault();
}); Привязать пользовательские события с помощью .live().
$( "p" ).live( "myCustomEvent", function( event, myName, myValue ) {
$( this ).text( "Hi there!" );
$( "span" )
.stop()
.css( "opacity", 1 )
.text( "myName = " + myName )
.fadeIn( 30 )
.fadeOut( 1000 );
});
$( "button" ).on( "click", function() {
$( "p" ).trigger( "myCustomEvent" );
}); Используйте объект для привязки нескольких обработчиков событий .live(). Обратите внимание, что .live() вызывает обработчики событий click, mouseover и mouseout для всех абзацев — даже новых.
$( "p" ).live({
click: function() {
$( this ).after( "<p>Another paragraph!</p>" );
},
mouseover: function() {
$( this ).addClass( "over" );
},
mouseout: function() {
$( this ).removeClass( "over" );
}
});