Spec-Zone.ru › jQuery

.live()

.live( events, handler )Возвращает: jQueryверсия устарела: 1.7, удалена: 1.9

Описание: Прикрепить обработчик событий для всех элементов, соответствующих текущему селектору, сейчас и в будущем.

  • версия добавлена: 1.3.live( events, handler )

    • events
      Тип: Строка
      Строка, содержащая тип JavaScript-события, например, "click" или "keydown". Начиная с jQuery 1.4, строка может содержать несколько типов событий, разделенных пробелами, или имена пользовательских событий.
    • handler
      Тип: Функция( Event eventObject )
      Функция, которая выполняется в момент срабатывания события.
  • версия добавлена: 1.4.live( events [, data ], handler )

    • events
      Тип: Строка
      Строка, содержащая тип JavaScript-события, например, "click" или "keydown". Начиная с jQuery 1.4, строка может содержать несколько типов событий, разделенных пробелами, или имена пользовательских событий.
    • data
      Тип: Объект
      Объект, содержащий данные, которые будут переданы обработчику события.
    • handler
      Тип: Функция( Event eventObject )
      Функция, которая выполняется в момент срабатывания события.
  • версия добавлена: 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() без применения одного из следующих обходных путей:
    1. Используйте нативные кликабельные элементы, такие как a или button, так как оба эти события поднимаются до document.
    2. Используйте .on() или .delegate(), прикреплённые к элементу ниже уровня document.body, так как мобильные iOS события поднимаются внутри тела.
    3. Примените 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" );
  }
});

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/live

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API