Подтвердить что ты не робот

Как перевести jQuery.live() в .on() с событиями, связанными с этим?

Я в процессе преобразования кода из устаревшего API .live() в .on() (см. примечания к выпуску jQuery 1.7)

У меня есть живые события, прикрепленные к this в нескольких настраиваемых плагинах jQuery, например.

this.live('click', function() {
    ...
});

jQuery.live() doc содержит некоторые рекомендации о том, как перейти на .on() следующим образом:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

однако это не работает:

$(document).on('click', this, function() {
    ...
});

поэтому... как сделать live-события привязаны к this работать с новым API on()?

4b9b3361

Ответ 1

Сделайте снимок:

$(document).on('click', this.selector, handler);

Объект jQuery имеет свойство selector, которое представляет селектор, используемый для создания этого объекта.

Обратите внимание, что селектор модифицирован с помощью методов обхода, поэтому я бы предположил, что ваш плагин обычно используется при первоначальном выборе DOM.


Чтобы избежать использования внутреннего свойства, вы можете просто изменить API своего плагина, чтобы он явно передавался.

Ответ 2

Свойство .selector недокументировано и, вероятно, будет удалено при удалении .live(). Как выглядел этот код при использовании .live()? Как используются эти плагины?

Ответ 3

Как и в jQuery 1.7, функция on docs используется для замены существующих отдельных методов привязки события:

one docs - это особый случай, и вы должны продолжать использовать его как есть.

Существующие события продолжают существовать и являются просто псевдонимами on. Нет официального отчета о том, что они будут удалены, поэтому вы можете быть в безопасности, чтобы продолжать использовать их, если вы их понимаете лучше. live и die устарели от jQuery 1.7, как упоминалось в сообщении в блоге и на live docs.

Событие on имеет несколько форматов, но подпись функции выглядит следующим образом:

.on( events [, selector] [, data], handler )

Bind:

$(selector).bind(events, data, handler);
$(selector).on(events, null, data, handler);

Источник:

bind: function( types, data, fn ) {
  return this.on( types, null, data, fn );
}

Делегат:

$(selector).delegate(subselector, events, data, handler);
$(selector).on(events, subselector, data, handler);

Источник:

delegate: function( selector, types, data, fn ) {
  return this.on( types, selector, data, fn );
}

Live:

$(selector).live(events, data, handler);
$(document).on(events, selector, data, handler);

Источник:

live: function( types, data, fn ) {
  jQuery( this.context ).on( types, this.selector, data, fn );
  return this;
}

Обратите внимание, что this.context был установлен с использованием this.context = document;, как указано в $(document).on(...).

Ответ 4

$(selector).on(events, data, handler)

Все еще отлично работает. Вы все еще можете использовать это. Ознакомьтесь с .on docs