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);
}
Работает как шарм.:)
Ответы
Ответ 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()
.
Вам следует попытаться найти обновленную версию плагина или попытаться заменить его самостоятельно.