Niedawno zaktualizowałem jQuery z 1.8 do 2.1. Nagle odkryłem, że .live()
przestaje działać.
Dostaję błąd TypeError: $(...).live is not a function
.
Czy jest jakaś metoda, której mogę użyć zamiast .live()
?
źródło
Niedawno zaktualizowałem jQuery z 1.8 do 2.1. Nagle odkryłem, że .live()
przestaje działać.
Dostaję błąd TypeError: $(...).live is not a function
.
Czy jest jakaś metoda, której mogę użyć zamiast .live()
?
.live()
został usunięty w wersji 1.9 i nowszych.Oznacza to, że jeśli aktualizujesz z wersji 1.8 i wcześniejszych, zauważysz, że coś się psuje, jeśli nie postępujesz zgodnie z poniższym przewodnikiem migracji. Nie należy po prostu wymienić .live()
się .on()
!
Dla szybkich / gorących poprawek na witrynie, nie tylko zastąpić słowa kluczowego live
z on
,
jak parametry są różne !
.live(events, function)
powinien odwzorować na:
.on(eventType, selector, function)
Selektor (dziecko) jest bardzo ważny! Jeśli nie musisz tego używać z jakiegokolwiek powodu, ustaw go na null
.
przed:
$('#mainmenu a').live('click', function)
następnie przenieś element potomny ( a
) do .on()
selektora:
$('#mainmenu').on('click', 'a', function)
przed:
$('.myButton').live('click', function)
następnie przenieś element ( .myButton
) do .on()
selektora i znajdź najbliższy element nadrzędny (najlepiej z identyfikatorem):
$('#parentElement').on('click', '.myButton', function)
Jeśli nie wiesz, co umieścić jako rodzic, body
zawsze działa:
$('body').on('click', '.myButton', function)
Możesz uniknąć refaktoryzacji kodu, dołączając następujący kod JavaScript
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
return this;
na końcu funkcji w celu zachowania zdolności łączeniaDokumentacja interfejsu API jQuery zawiera
live()
przestarzałe od wersji 1.7 i usunięte od wersji 1.9: link .Ponadto stwierdza:
źródło
Port przesyłania dalej
.live()
dla jQuery> = 1,9 Unika refaktoryzacji zależności JS na.live()
Wykorzystuje zoptymalizowany kontekst selektora DOMźródło
.live () był przestarzały i został teraz usunięty z jQuery 1.9 Należy użyć .on ()
źródło
.live został usunięty w wersji 1.9, zapoznaj się z instrukcją aktualizacji: http://jquery.com/upgrade-guide/1.9/#live-removed
źródło
Bardzo prosta poprawka, która nie wymaga zmiany kodu, wystarczy dodać skrypt migracji jquery, pobierz tutaj https://github.com/jquery/jquery-migrate/
Dostarcza przestarzałe jquery, ale potrzebne funkcje, takie jak „na żywo”, „przeglądarka” itp
źródło
Zwykle nie używam składni .on (), jeśli nie jest to konieczne. Na przykład możesz migrować łatwiej:
stary:
Nowy:
Oto lista prawidłowych procedur obsługi zdarzeń: https://api.jquery.com/category/forms/
źródło
Jeśli akurat używasz klejnotu jQuery Ruby on Rails
jquery-rails
i z jakiegoś powodu nie możesz refaktoryzować swojego starszego kodu, ostatnia obsługiwana wersja to2.1.3
i możesz go zablokować, używając następującej składni na swoimGemfile
:następnie możesz użyć następującego polecenia, aby zaktualizować:
Mam nadzieję, że pomogą innym w obliczu podobnego problemu.
źródło