2013-01-23 19 views
8

Moje środowisko internetowe automatycznie zaktualizowało mój skrypt jQuery do ostatniej wersji 1.9.Jak zamienić "na żywo" z jQuery 1.8.3 na jQuery 1.9?

Teraz moim:

$(".myclass").live("click", function() {... 

nie działają już. Używałem go głównie z wywołanym ajaxem, który wypełnił html na mojej stronie.

Chciałbym wiedzieć, jak zastąpić tę funkcjonalność w ostatniej wersji. Znajomy powiedział mi, żebym zamiast tego używał "on", ale "on" pozostaje ustawiony na tym samym elemencie.

Wyjaśnienie, w tym przykładzie (bez ajax), używam ikony "+", aby wyświetlić "ul li list".

$(".closed").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show(); 
    $(this).addClass("openned").removeClass('closed'); 
    $(this).html('<i class="icon-minus"></i>'); 
}); 

$(".openned").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide(); 
    $(this).addClass("closed").removeClass('openned'); 
    $(this).html('<i class="icon-plus"></i>'); 
}); 

(wiem, że skrypt nie jest najbardziej zoptymalizowane kiedykolwiek, ale to działało. Kiedyś zajęcia, aby otworzyć lub zamknąć list. A jeśli użytkownik nie ma włączonego JS, nic nie jest ukryte, wszystko zagięte listy są otwarte)

Uwagi:

+0

Czy próbowałeś "wiązania"? –

+0

Rzeczywiście, szukałem od 1,8 do 1,9 lub po prostu "jquery 1.9 live", nie zauważając, że było to z 1.7! Dziękuję Ci! – Polopollo

+0

Zobacz [Przykłady migracji] (http://stackoverflow.com/a/14354091/584192) –

Odpowiedz

25

docs już stanowić przykład:

Przepisanie sposobu .live(), jeśli chodzi o jego następców jest prosta; Są to szablony dla równoważnych wezwań do wszystkich metod mocowania trzy zdarzenia:

$(selector).live(events, data, handler); // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler); // jQuery 1.7+ 

Więc: $(document).on("click", ".closed", function() { ... }).

+0

Dokumenty mają również bardzo dobry opis działania selektora arg: "Gdy selektor jest dostarczony, procedura obsługi zdarzenia jest określana jako delegowana. Program obsługi nie jest wywoływany, gdy zdarzenie występuje bezpośrednio na powiązanym elemencie, ale tylko dla potomkowie (elementy wewnętrzne), które pasują do selektora. jQuery pę dza zdarzenie od celu zdarzenia do elementu, do którego jest dołączony handler (tj. od najbliższego do najbardziej oddalonego elementu) i uruchamia program obsługujĘ ... cy wszystkie elementy wzdłuż tej ś cieżki pasujĘ ... ce do selektora." –

+0

Rzeczywiście, czytałem przykłady nowej dokumentacji" na "... Nie myślałem o" żywej "dokumentacji ... Dziękuję! – Polopollo

+0

.on nie działa jak .live, myślę, że Jquery myśli tak naprawdę nie dostarczyło czegoś, co mogłoby go zastąpić. .live był bardzo wygodny. – sam360

1

Musisz użyć on zamiast live. bo na żywo jest nieaktualna od wersji 1.7

+1

To nie jest w porządku. $ (". closed") będzie zawierać tylko te elementy, które pasują do tego kodu, a nie elementy, które później zostaną oznaczone jako zamknięte. Punktem wyjścia było to, że zapytanie było "na żywo". –

7

Trzeba użyć on z delegowanego obsługi:

$('#parent').on('click', '.closed', function() { 
    // your code... 
}); 

pamiętać, że należy zastąpić #parent z najbliższego elementu nadrzędnego do .closed który jest dostępny na stronie obciążenia - zwykle element, który .closed został dołączony do.

Powiązane problemy