2013-01-18 8 views
15

Powiel możliwe:
jQuery 1.7 - Turning live() into on()jquery.unobtrusive-ajax uszkodzony podczas aktualizacji wtyczki do jQuery 1.9.0

// Rozwiązanie: Po prostu wymienić cztery wystąpienia jak zatwierdzona odpowiedź sugeruje i dyskretna wtyczka ajax jest już gotowa i znowu działa z jquery 1.9.0

Aktualizacja // Przestrzegaj komentarzy do odpowiedzi zaznaczonych na dole, co jest najlepszym sposobem rozwiązania tego problemu.

// Oryginalna wiadomość: Uaktualniłem jQuery do wersji 1.9.0, ale potem dyskretna wtyczka ajax przestała działać, ponieważ przestała używać metody live. Próbowałem go zastąpić, ponieważ uaktualnienie naprawia dla mnie inny błąd. Jednak to nie działa. Ja po prostu wymienić na żywo ze on tak:

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

Można zacząć od poszukiwania stackoverflow lub czytanie dokumentacji. http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-into-on http://api.jquery.com/on/ –

+13

@KevinB nieco ostry i niepomocny:/uderzyłem w ten sam problem i przeszukano go i przeszukałem Stackoverflow - trafiłem na to pytanie i nigdy nie natknąłem się na ten, który łączyłeś z – Cocowalla

+0

. Sądzę, że niektórzy ludzie mają problemy z wymyślaniem dobrych terminów wyszukiwania. Na przykład, ten był "przekonwertować .live do .on jQuery", pierwsze 6 wyników, które dostałem wszystkie pokazują dobre przykłady, jak przekonwertować '.live' na' .on'. –

Odpowiedz

12

Odpowiednik live użyciu on (delegacji) wynosi:

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

można znaleźć .on() metoda dokumentacji jQuery tutaj:

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

.on() mnie thod dołącza programy obsługi zdarzeń do aktualnie wybranego zestawu elementów w obiekcie jQuery. Od wersji jQuery 1.7 metoda .on() zapewnia wszystkie funkcje wymagane do dołączania procedur obsługi zdarzeń. Dla pomoc w konwersji ze starszych metod jQuery zdarzeń, zobacz .bind(), .delegate() i .live().

Aby usunąć zdarzenia związane z .Na() patrz .off(). Aby dołączyć zdarzenie działa tylko raz, a następnie usuwa sama patrz .one()

+0

Awsome, cheers! –

+0

sprawdź również obejścia tutaj - http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-correct-in-jquery-validate-unobtrusive –

+2

i uaktualnij jquery.validate do wersji 1.11.0 (opublikowanej dzisiaj): https: // nuget.org/packages/jQuery.Validation/1.11.0 –

Powiązane problemy