2013-03-18 15 views
19

Abbiamo recentemente aggiornato il nostro jQuery alla versione 1.9.0, ma ha rotto il nostro plugin di punta. La sua funzionalità live provoca ora un errore.tipsy live non funziona con jQuery 1.9.0

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

TypeError: this[binder] is not a function 

Sono presenti correzioni o patch per questo? Googling non ha portato a nulla di utile.


UPDATE:

Grazie per le risposte. Ho deciso di provare a risolvere il problema da solo, perché non sono riuscito a trovare alcuna patch.

In seguito all'ispezione, l'errore sembrava davvero facile da rintracciare. Il plug-in brilla può essere facilmente modificato per utilizzare la funzionalità on invece della deprecata funzionalità live. Nel plugin brillo, ho sostituito il seguente codice:

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

funziona come un fascino. :)

+0

cerca qui con 'conflitto jquery plugin' – Amir

+0

Great post! Da dove viene "this.selector"? –

+0

@RichPeck 'this.selector' è una proprietà dell'oggetto jQuery sottostante. – crush

risposta

9

è necessario includere il plug-in di migrazione jquery, dal momento che si utilizza live:true che utilizza jquery.live che era removed in jquery 1.9.

Per compatibilità con le versioni precedenti è stato creato uno migration plugin che può essere downloaded here e includere il plug-in di migrazione per aggiungere il supporto per i metodi e le utilità rimossi.

avrei fatto qualcosa di simile

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

Preferisco non usare il plugin di migrazione jQuery per questo progetto. Intendiamo non utilizzare alcuna funzionalità deprecata. – Dysprosium

+0

poi sarai in grado di cambiare il plugin 'tipsy', se non puoi, allora penso che tu abbia un problema –

+0

Ho aggiornato la mia domanda con la correzione. – Dysprosium

0

Il problema è che questo plugin usano ancora .live() di lasciare il lavoro il metodo live lì si è utilizzato, esso è deprecato ed è stato sostituito con .on().

Dovresti provare a cercare la versione aggiornata del plug-in o provare a sostituirlo da solo.