2013-01-18 9 views
15

Mögliche Duplizieren:
jQuery 1.7 - Turning live() into on()jquery.unobtrusive-Ajax-gebrochen-Plugin, wenn zu JQuery Aktualisierung 1.9.0

// Lösung: einfach ich ersetzt die vier Ereignisse wie die zugelassene Antwort vorgeschlagen und unaufdringlich Ajax-Plugin ist und arbeitet wieder mit jquery 1.9.0

Update // Beachten Sie die Kommentare für die Antwort auf der Unterseite markiert, die der beste Weg ist, um dies zu lösen.

// Original Beitrag: Ich habe auf jQuery 1.9.0 aktualisiert, aber dann unaufdringlich Ajax-Plugin ging nach unten, da sie die Live-Methode verwarf. Ich habe versucht, es so zu ersetzen, da das Upgrade einen anderen Fehler für mich behebt. Es funktioniert jedoch nicht. Ich einfach leben mit auf wie folgt ersetzt:

$("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

Sie durch die Suche oder das Lesen der Stackoverflow Dokumentation beginnen konnte. http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-into-on http://api.jquery.com/on/ –

+13

@ KevinB ein bisschen hart und wenig hilfreich:/Ich traf die Das gleiche Problem und Google und Suche Stackoverflow - Ich habe diese Frage und stieß nie auf die, die Sie mit – Cocowalla

+0

Ich denke, einige Leute haben nur Schwierigkeiten mit guten Suchbegriffen. Zum Beispiel war dies "convert .live zu .on jQuery", die ersten 6 Ergebnisse, die ich bekomme, zeigen alle gute Beispiele, wie man '.live' in' .on' umwandelt. –

Antwort

12

Equivalent von live mit on (Delegation) ist:

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

Sie können jQuerys .on() Methode Dokumentation finden Sie hier:

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

Die .on() mich thod hängt Ereignishandler an die aktuell ausgewählte Menge von Elementen im jQuery-Objekt an. Ab jQuery 1.7 bietet die .on() -Methode alle Funktionen, die zum Anhängen von Ereignishandlern erforderlich sind. Für Hilfe von älteren jQuery Ereignismethoden konvertieren, siehe .bind(), .delegate() und .live().

Um Ereignisse gebunden mit .on() siehe .off() zu entfernen. Um ein Ereignis zu befestigen, dass läuft nur einmal und dann entfernt sich selbst finden .one()

+0

Awsome, Prost! –

+0

überprüfen Sie auch die Problemumgehungen hier - http://connect.microsoft.com/VisualStudio/feedback/details/776965/bitte-support-jquery-v1-9-0-richtig-in-jquery-validate-unaufdringlich –

+2

und Upgrade jquery.validate auf 1.11.0 (heute veröffentlicht): https: // nuget.org/packages/jQuery.Validation/1.11.0 –