2013-01-18 1 views
15

Possible en double:
jQuery 1.7 - Turning live() into on()plug-in jquery.unobtrusive-ajax cassé lors de la mise à jour Jquery 1.9.0

// Solution: J'ai simplement remplacé les quatre occurrences comme la réponse approuvée suggéré et ajax plugin discret est en place et fonctionne à nouveau avec jquery 1.9.0

Mise à jour // Observez les commentaires pour la réponse marquée en bas qui est le meilleur moyen de résoudre ce problème. J'ai mis à niveau vers jQuery 1.9.0, mais le plugin ajax discret est tombé en panne depuis qu'ils ont déconseillé la méthode live. J'ai essayé de le remplacer comme ça car la mise à jour corrige un autre bug pour moi. Cependant, cela ne fonctionne pas. J'ai simplement remplacé en direct avec comme ça:

$("a[data-ajax=true]").on("click", function (evt) { 
     evt.preventDefault(); 
     asyncRequest(this, { 
      url: this.href, 
      type: "GET", 
      data: [] 
     }); 
    }); 

    $("form[data-ajax=true] input[type=image]").on("click", function (evt) { 
     var name = evt.target.name, 
      $target = $(evt.target), 
      form = $target.parents("form")[0], 
      offset = $target.offset(); 

     $(form).data(data_click, [ 
      { name: name + ".x", value: Math.round(evt.pageX - offset.left) }, 
      { name: name + ".y", value: Math.round(evt.pageY - offset.top) } 
     ]); 

     setTimeout(function() { 
      $(form).removeData(data_click); 
     }, 0); 
    }); 

    $("form[data-ajax=true] :submit").on("click", function (evt) { 
     var name = evt.target.name, 
      form = $(evt.target).parents("form")[0]; 

     $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []); 

     setTimeout(function() { 
      $(form).removeData(data_click); 
     }, 0); 
    }); 

    $("form[data-ajax=true]").on("submit", function (evt) { 
     var clickInfo = $(this).data(data_click) || []; 
     evt.preventDefault(); 
     if (!validate(this)) { 
      return; 
     } 
     asyncRequest(this, { 
      url: this.action, 
      type: this.method || "GET", 
      data: clickInfo.concat($(this).serializeArray()) 
     }); 
    }); 
+0

Vous pouvez commencer par la recherche stackoverflow ou lire la documentation. http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-into-on http://api.jquery.com/on/ –

+13

@KevinB un peu dur et inutile:/j'ai frappé le même question et googled et recherche Stackoverflow - J'ai frappé cette question et je n'ai jamais rencontré celui que vous avez lié à – Cocowalla

+0

Je suppose que certaines personnes ont juste du mal à trouver de bons termes de recherche. Par exemple, celui-ci était "convertir .live en .on jQuery", les 6 premiers résultats que je reçois tous montrent de bons exemples de la façon de convertir '.live' en' .on'. –

Répondre

12

équivalent de live à l'aide on (délégation) est:

$(document).on("click","a[data-ajax=true]", function (evt) {...}); 

Vous trouverez la documentation de la méthode de jquery .on() ici:

>> http://api.jquery.com/on/ <<

Le .on() moi thod attache des gestionnaires d'événements à l'ensemble actuellement sélectionné des éléments de l'objet jQuery. À partir de jQuery 1.7, la méthode .on() fournit toutes les fonctionnalités requises pour attacher des gestionnaires d'événements. Pour aide dans la conversion de méthodes d'événements jQuery anciens, voir .bind(), .delegate() et .live().

Pour supprimer des événements liés à .on(), voir .off(). Pour joindre un événement qui fonctionne une seule fois puis supprime lui-même, voir .one()

+0

Awsome, à votre santé! –

+0

également vérifier les solutions de contournement ici - http://connect.microsoft.com/VisualStudio/commentaires/détails/776965/s'il vous plaît-support-jquery-v1-9-0-correctement-dans-jquery-valider-discrète –

+2

et mise à niveau de jquery.validate à 1.11.0 (publié aujourd'hui): https: // nuget.org/packages/jQuery.Validation/1.11.0 –

Questions connexes