tipsy live no funciona con jQuery 1.9.0
jquery-plugins tooltip (2)
Recientemente hemos actualizado nuestro jQuery a 1.9.0, pero se rompió nuestro plugin borracho. Su funcionalidad en live
ahora causa un error.
$(''.tooltip, abbr'').tipsy({
live: true
});
TypeError: this[binder] is not a function
¿Hay alguna corrección o parche para esto? Googlear no condujo a nada útil.
ACTUALIZAR:
Gracias por las respuestas. Decidí intentar solucionar el problema yo mismo, porque no pude encontrar ningún parche.
Tras la inspección, el error parecía muy fácil de rastrear El complemento borracho puede parchearse fácilmente para usar la funcionalidad on
lugar de la funcionalidad en live
desaprobada. En el plugin tipsy, reemplacé el siguiente código:
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);
}
con:
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);
}
Funciona de maravilla. :)
El problema es que este complemento aún usa .live()
para que funcione el método en live
que .live()
allí, está en desuso y ha sido reemplazado por .on()
Debe intentar buscar una versión actualizada del complemento o intentar reemplazarlo usted mismo.
debe incluir el complemento de migración de jquery, ya que está utilizando live:true
, utiliza jquery.live que se eliminó en jquery 1.9 .
Para la compatibilidad con versiones anteriores, han creado un complemento de migración que se puede descargar aquí e incluyen el complemento de migración para agregar compatibilidad con los métodos y utilidades eliminados.
Estaría haciendo algo como
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);
}
}