2013-03-18 4 views
19

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

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

TypeError: this[binder] is not a function 

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


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); 
} 

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

+0

поиск здесь с 'jquery plugin conflict' – Amir

+0

Отличный пост! Откуда вы берете 'this.selector'? –

+0

@RichPeck 'this.selector' является свойством базового объекта jQuery. – crush

ответ

9

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

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

я буду делать что-то вроде

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); 
    } 
} 
+0

Я предпочитаю не использовать плагин миграции jQuery для этого проекта. Мы не намерены использовать устаревшие функции. – Dysprosium

+0

, тогда вы сможете изменить плагин 'tipsy', если вы не можете, то я думаю, что у вас есть проблема –

+0

Я обновил свой вопрос с исправлением. – Dysprosium

0

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

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

Смежные вопросы