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

JQuery 1.9.live() не является функцией

Недавно я обновил jQuery с 1,8 до 2,1. Я вдруг обнаружил, что .live() перестает работать.
Я получаю сообщение об ошибке TypeError: $(...).live is not a function.

Есть ли какой-либо метод, который я могу использовать вместо .live()?

4b9b3361

Ответ 1

jQuery .live() был удален в версии 1.9.

Это означает, что если вы обновляетесь с версии 1.8 и более ранних версий, вы заметите, что все портит, если вы не следуете приведенному ниже руководству по миграции. Вы не должны просто заменять .live() на .on()!


Прочитайте перед началом поиска и замены:

Для быстрых/горячих исправлений на реальном сайте не просто замените ключевое слово live на on, поскольку параметры отличаются!

.live(events, function)

следует сопоставить с:

.on(eventType, selector, function)

Селектор очень важен! Если вам не нужно использовать это по какой-либо причине, установите его на null.


Пример миграции 1:

перед:

$('#mainmenu a').live('click', function)

после этого вы переместите дочерний элемент (a) в селектор .on():

$('#mainmenu').on('click', 'a', function)

Пример миграции 2:

перед:

$('.myButton').live('click', function)

после этого вы перемещаете элемент (.myButton) в селектор .on() и находите ближайший родительский элемент (желательно с идентификатором):

$('#parentElement').on('click', '.myButton', function)

Если вы не знаете, что поставить в качестве родителя, body всегда работает:

$('body').on('click', '.myButton', function)

См. также:

Ответ 2

Вы можете избежать рефакторинга своего кода, включив следующий код JavaScript

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
    }
});

Ответ 3

В документации API jQuery перечислены live() как устаревшие версии версии 1.7 и удалены с версии 1.9: ссылка.

версия устарела: 1,7, удалена: 1,9

Кроме того, он указывает:

Как и в jQuery 1.7, метод .live() устарел. Используйте .on() для присоединения обработчиков событий. Пользователи более старых версий jQuery должны использовать .delegate() в предпочтении .live()

Ответ 4

Первой порт .live() для jQuery >= 1.9  Избегает рефакторинга зависимостей JS от .live()  Использует оптимизированный контекст DOM-селектора

/** 
 * Forward port jQuery.live()
 * Wrapper for newer jQuery.on()
 * Uses optimized selector context 
 * Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
  jQuery.fn.extend({
      live: function (event, callback) {
         if (this.selector) {
              jQuery(document).on(event, this.selector, callback);
          }
      }
  });
}

Ответ 6

.live() устарел и теперь удален из jQuery 1.9 Вы должны использовать . On()

Ответ 7

Очень простое исправление, которое не требует изменения кода, просто добавьте jquery migration script, загрузите здесь https://github.com/jquery/jquery-migrate/

Он поставляет jquery устаревшие, но необходимые функции, такие как "live", "browser" и т.д.

Ответ 8

Я не хочу использовать синтаксис .on(), если это не необходимо. Например, вы можете легко выполнить миграцию следующим образом:

старый:

$('.myButton').live('click', function);

новый

$('.myButton').click(function)

Ниже приведен список допустимых обработчиков событий: https://api.jquery.com/category/forms/

Ответ 9

Если вы используете JQuery gem Ruby on Rails, и по какой-то причине вы не можете реорганизовать свой устаревший код, последняя версия, которая все еще поддерживает, - 2.1.3, и вы можете заблокировать ее, используя следующий синтаксис вашего Gemfile:

gem 'jquery-rails', '~> 2.1', '= 2.1.3'

то вы можете использовать следующую команду для обновления:

bundle update jquery-rails

Я надеюсь, что это поможет другим, столкнувшимся с подобной проблемой.

Ответ 10

Сверху только

Если вы не знаете, что поставить в качестве родителя, тело всегда работает:

$('body').on('click', '.myButton', function)



$('.jcrop-tracker').live('dblclick', function () {
    $('#btnCrop').trigger("click");
});

становится

$('body').on('dblclick', '.jcrop-tracker', function () {
    $('#btnCrop').trigger("click");
});