Я недавно обновил jQuery с 1.8 до 2.1. Я вдруг обнаружил, что .live()
перестает работать.
Я получаю ошибку TypeError: $(...).live is not a function
.
Есть ли какой-нибудь метод, который я могу использовать вместо .live()
?
источник
Я недавно обновил jQuery с 1.8 до 2.1. Я вдруг обнаружил, что .live()
перестает работать.
Я получаю ошибку TypeError: $(...).live is not a function
.
Есть ли какой-нибудь метод, который я могу использовать вместо .live()
?
.live()
был удален в версии 1.9 и далее.Это означает, что при обновлении с версии 1.8 и более ранних версий вы заметите, что что-то сломалось, если вы не будете следовать приведенному ниже руководству по миграции. Вы не должны просто заменить .live()
на .on()
!
Для быстрого / оперативного исправления на реальном сайте не просто заменяйте ключевое слово live
на on
, так
как параметры разные !
.live(events, function)
следует сопоставить с:
.on(eventType, selector, function)
(Дочерний) селектор очень важен! Если вам не нужно использовать это по какой-либо причине, установите для него значение null
.
перед:
$('#mainmenu a').live('click', function)
после, вы перемещаете дочерний элемент ( a
) в .on()
селектор:
$('#mainmenu').on('click', 'a', function)
перед:
$('.myButton').live('click', function)
после, вы перемещаете элемент ( .myButton
) в .on()
селектор и находите ближайший родительский элемент (желательно с идентификатором):
$('#parentElement').on('click', '.myButton', function)
Если вы не знаете, что поставить в качестве родителя, body
всегда работает:
$('body').on('click', '.myButton', function)
Вы можете избежать рефакторинга своего кода, включив следующий код JavaScript
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
return this;
в конце функции, чтобы сохранить способность цепочкиДокументация по API jQuery
live()
устарела с версии 1.7 и удалена с версии 1.9: ссылка .Кроме того, в нем говорится:
источник
Прямой порт
.live()
для jQuery> = 1.9 Позволяет избежать рефакторинга зависимостей JS от.live()
оптимизированного контекста селектора DOM.источник
.live () устарела и теперь удалена из jQuery 1.9. Вы должны использовать .on ()
источник
.live был удален в 1.9, см. руководство по обновлению: http://jquery.com/upgrade-guide/1.9/#live-removed
источник
Очень простое исправление, которое не требует изменения вашего кода, просто добавьте скрипт миграции jquery, скачайте здесь https://github.com/jquery/jquery-migrate/
Он предоставляет устаревшие, но необходимые функции, такие как «live», «browser» и т. Д.
источник
Я склонен не использовать синтаксис .on (), если в этом нет необходимости. Например, вы можете мигрировать проще, как это:
старый:
новые:
Вот список допустимых обработчиков событий: https://api.jquery.com/category/forms/
источник
Если вы используете гем jQuery
jquery-rails
для Ruby on Rails и по какой-то причине вы не можете реорганизовать свой унаследованный код, последняя поддерживаемая версия -2.1.3
и вы можете заблокировать ее, используя следующий синтаксисGemfile
:тогда вы можете использовать следующую команду для обновления:
Я надеюсь, что помочь другим, сталкивающимся с подобной проблемой.
источник