21 votes

tipsy live ne fonctionne pas avec jQuery 1.9.0

Nous avons récemment mis à jour notre jQuery vers la version 1.9.0, mais cela a cassé notre plugin tipsy. Son live provoque désormais une erreur.

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

TypeError: this[binder] is not a function

Existe-t-il des corrections ou des correctifs pour ce problème ? Les recherches sur Google n'ont rien donné d'utile.


UPDATE :

Merci pour les réponses. J'ai décidé d'essayer de résoudre le problème moi-même, car je n'ai trouvé aucun correctif.

Après inspection, l'erreur semble très facile à détecter. Le plugin tipsy peut facilement être corrigé pour utiliser l'option on au lieu de la fonctionnalité obsolète live fonctionnalité. Dans le plugin tipsy, j'ai remplacé le code suivant :

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

avec :

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

Fonctionne comme un charme :)

14voto

Arun P Johny Points 151748

Vous devez inclure le plugin de migration jquery, puisque vous utilisez live:true il utilise jquery.live qui était supprimé dans jquery 1.9 .

Pour assurer la rétrocompatibilité, ils ont créé un plugin de migration qui peut être téléchargé ici et inclure le plugin de migration pour rétablir la prise en charge des méthodes et utilitaires supprimés.

Je ferais quelque chose comme

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

0voto

Andrea Turri Points 3655

Le problème est que ce plugin utilise toujours .live() pour faire fonctionner la méthode live que vous avez utilisé, il est obsolète et a été remplacé par .on() .

Vous devriez essayer de rechercher une version mise à jour du plugin ou essayer de le remplacer vous-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X