2013-03-18 10 views
19

Wir haben vor kurzem unsere jQuery 1.9.0 aktualisiert haben, aber es brach unser beschwipst Plugin. Seine live Funktionalität verursacht jetzt einen Fehler.beschwipst Live funktioniert nicht mit jQuery 1.9.0

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

TypeError: this[binder] is not a function 

Gibt es irgendwelche Korrekturen oder Patches für diese? Googeln hat zu nichts Sinnvollem geführt.


UPDATE:

Danke für die Antworten. Ich beschloss, das Problem selbst zu beheben, da ich keine Patches finden konnte.

Bei näherer Betrachtung schien der Fehler wirklich einfach zu verfolgen. Das beschwipst Plugin kann leicht die on Funktionalität anstelle der veralteten live Funktionalität nutzen gepatcht werden. Im beschwipst Plugin, ersetzte ich den folgenden Code:

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

mit:

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

Arbeiten wie ein Charme. :)

+0

Suche hier mit 'jQuery-Plugin conflict' – Amir

+0

großen Beitrag! Woher bekommst du 'this.selector'? –

+0

@RichPeck 'this.selector' ist eine Eigenschaft des zugrunde liegenden jQuery-Objekts. – crush

Antwort

9

Sie müssen jquery Migration Plugin enthalten, da Sie live:true verwenden verwenden Sie jquery.live, die removed in jquery 1.9 war.

Für die Abwärtskompatibilität haben sie eine migration plugin erstellt, die downloaded here sein kann und das Migrations-Plugin enthält, um Unterstützung für die entfernten Methoden und Dienstprogramme hinzuzufügen.

Ich würde so etwas wie

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

Ich bevorzuge nicht das jQuery Migration Plugin für dieses Projekt. Wir beabsichtigen, keine veralteten Funktionen zu verwenden. – Dysprosium

+0

dann werden Sie in der Lage sein, die 'tipsy' Plugin zu ändern, wenn Sie nicht, dann kann ich glaube, Sie haben ein Problem –

+0

ich meine Frage mit dem Update aktualisiert habe. – Dysprosium

0

Das Problem ist, dass dieses Plugin noch .live() Arbeit, die Methode zu lassen verwenden tun live Sie dort verwendet wird, ist es veraltet und wird mit .on() ersetzt.

sollten Sie versuchen, für aktualisierte Version des Plug-In suchen oder versuchen, es selbst zu ersetzen.