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

Jays.com 1.9.0 не работает с jQuery 1.9.0

Недавно мы обновили наш jQuery до 1.9.0, но он сломал наш подвыпивший плагин. Его функциональность live теперь вызывает ошибку.

$('.tooltip, abbr').tipsy({
    live: true
});

TypeError: this[binder] is not a function

Есть ли какие-либо исправления или исправления для этого? Googling не принес ничего полезного.


UPDATE:

Спасибо за ответы. Я решил сам решить проблему, потому что не мог найти никаких патчей.

После осмотра ошибка показалась очень легкой для отслеживания. Подвесной плагин может быть легко исправлен, чтобы использовать функциональность on вместо устаревших функций live. В подвыпитом плагине я заменил следующий код:

if (options.trigger != 'manual') {
    var binder = options.live ? 'live' : 'bind',
        eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    this[binder](eventIn, enter)[binder](eventOut, leave);
}

с:

if (options.trigger != 'manual') {
    var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if (options.live)
        $(document).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    else
        this.bind(eventIn, enter).bind(eventOut, leave);
}

Работает как шарм.:)

4b9b3361

Ответ 1

вам нужно включить плагин миграции jquery, так как вы используете live:true, он использует jquery.live, который был удален в jquery 1.9.

Для обратной совместимости они создали плагин миграции, который может быть загружен здесь и включите плагин миграции, чтобы добавить обратно поддержку удаленных методов и утилит.

Я бы сделал что-то вроде

if (options.trigger != 'manual') {
    var eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if(options.live){
      $(this.context).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    } else {
      this.on(eventIn, enter).on(eventOut, leave);
    }
}

Ответ 2

Проблема в том, что этот плагин по-прежнему использует .live(), чтобы использовать метод live, который вы там использовали, он устарел и был заменен на .on().

Вам следует попытаться найти обновленную версию плагина или попытаться заменить его самостоятельно.