Powiedziano mi, żebym używał document.ready, kiedy po raz pierwszy zacząłem używać Javascript / jQuery, ale tak naprawdę nigdy nie dowiedziałem się, dlaczego.
Czy ktoś mógłby podać kilka podstawowych wskazówek, kiedy warto zawijać kod javascript / jquery wewnątrz kodu jQuery document.ready
?
Niektóre tematy, które mnie interesują:
.on()
Metoda jQuery :.on()
całkiem sporo używam tej metody dla AJAX (zazwyczaj na dynamicznie tworzonych elementach DOM). Czy elementy.on()
obsługi kliknięć powinny zawsze znajdować się w środkudocument.ready
?- Wydajność: Czy bardziej wydajne jest przechowywanie różnych obiektów javascript / jQuery w dokumencie lub poza nim (również, czy różnica w wydajności jest znacząca?)?
- Zakres obiektu: AJAX załadowane strony mogą nie obiekty dostępu, które zostały wewnątrz document.ready poprzedniej strony jest, prawda? Mają dostęp tylko do obiektów, które były poza document.ready (tj. Prawdziwie „globalne” obiekty)?
Aktualizacja: Aby postępować zgodnie z najlepszymi praktykami, cały mój skrypt javascript (biblioteka jQuery i kod mojej aplikacji) znajduje się na dole mojej strony HTML i używam defer
atrybutu w skryptach zawierających jQuery na moich stronach załadowanych AJAX, może uzyskać dostęp do biblioteki jQuery na tych stronach.
javascript
jquery
dom
event-handling
document-ready
Tim Peterson
źródło
źródło
Odpowiedzi:
W prostych słowach
Załóżmy, że umieściłeś swój kod jQuery w
head
sekcji i próbujesz uzyskać dostęp dodom
elementu (kotwicy, img itp.), Nie będziesz mieć do niego dostępu, ponieważhtml
jest interpretowany od góry do dołu, a elementy html nie są obecne, gdy kod jQuery biegnie.Aby rozwiązać ten problem, umieszczamy każdy kod jQuery / javascript (który używa DOM) wewnątrz
$(document).ready
funkcji, która jest wywoływana, gdy wszystkiedom
elementy są dostępne.I to jest powód, dla którego umieszczasz swój kod jQuery na dole (po wszystkich elementach dom, tuż przed
</body>
), nie ma potrzeby$(document).ready
Nie ma potrzeby umieszczania
on
metody w środku$(document).ready
tylko wtedy, gdy używaszon
metodydocument
z tego samego powodu, który wyjaśniłem powyżej.EDYTOWAĆ
Z komentarzy,
$(document).ready
nie czeka na obrazy lub skrypty. To jest duża różnica między$(document).ready
i$(document).load
Tylko kod, który uzyskuje dostęp do DOM, powinien znajdować się w gotowym module obsługi. Jeśli jest to wtyczka, nie powinna być gotowa.
źródło
$(document).ready
. Zobacz tohead
skrypcie po manipulowaniu elementami,document.ready
nie jest to potrzebne. Zdjęcia są jednak szczególnym przypadkiem ...jQuery
kodu w gotowym module obsługi. Tylko kod, który uzyskuje dostęp do DOM. Jeśli jest to plugin, to nie powinno być wready
przypadkuOdpowiedzi:
Nie, nie zawsze. Jeśli załadujesz JS w nagłówku dokumentu, będziesz musiał. Jeśli tworzysz elementy po załadowaniu strony przez AJAX, będziesz musiał. Nie musisz tego robić, jeśli skrypt znajduje się poniżej elementu html, do którego dodajesz moduł obsługi.
To zależy. Dołączenie modułów obsługi zajmie tyle samo czasu, ale zależy to tylko od tego, czy chcesz, aby stało się to natychmiast po załadowaniu strony, czy też chcesz, aby czekało, aż załaduje się cały dokument. Zależy to więc od innych rzeczy, które robisz na stronie.
Zasadniczo jest to własna funkcja, więc może uzyskiwać dostęp tylko do zmiennych zadeklarowanych w zakresie globalnym (poza / ponad wszystkimi funkcjami) lub z
window.myvarname = '';
źródło
Zanim będziesz mógł bezpiecznie używać jQuery, musisz upewnić się, że strona jest w stanie, w którym jest gotowa do manipulowania. Dzięki jQuery osiągamy to, umieszczając nasz kod w funkcji, a następnie przekazując tę funkcję do
$(document).ready()
. Funkcja, którą przekazujemy, może być po prostu funkcją anonimową .Spowoduje to uruchomienie funkcji, którą przekażemy do .ready (), gdy dokument będzie gotowy. Co tu się dzieje? Używamy $ (document) do utworzenia obiektu jQuery z dokumentu naszej strony, a następnie wywołujemy funkcję .ready () na tym obiekcie, przekazując mu funkcję, którą chcemy wykonać.
Ponieważ jest to coś, co często robisz, jeśli wolisz, jest na to skrócona metoda - funkcja $ () pełni podwójną funkcję jako alias dla $ (document) .ready (), jeśli przekażesz jej funkcję:
To dobra lektura: Jquery Fundamentals
źródło
(function($){ })(jQuery);
którego zawija swój kod tak, że $ jest jQuery wewnątrz tego zamknięcia.ready () - określa funkcję do wykonania, gdy DOM jest w pełni załadowany.
Oto lista wszystkich metod jQuery
Czytaj dalej Przedstawiamy $ (document) .ready ()
źródło
Aby być realistą,
document.ready
nie jest to potrzebne do niczego innego niż dokładne manipulowanie DOM i nie zawsze jest potrzebne lub jest najlepszą opcją. Chodzi mi o to, że kiedy tworzysz dużą wtyczkę jQuery, na przykład, prawie nie używasz jej w całym kodzie, ponieważ starasz się zachować ją SUCHĄ, więc w metodach, które manipulują DOM, ale mają być wywoływane, uzyskujesz jak najwięcej abstrakcji później. Kiedy cały twój kod jest ściśle zintegrowany, jedyną dostępną metodądocument.ready
jest zwykle to,init
gdzie dzieje się cała magia DOM. Mam nadzieję, że to odpowiada na twoje pytanie.źródło
Powinieneś powiązać wszystkie akcje w document.ready, ponieważ powinieneś poczekać, aż dokument zostanie w pełni załadowany.
Ale powinieneś utworzyć funkcje dla wszystkich akcji i wywoływać je z poziomu document.ready. Kiedy tworzysz funkcje (obiekty globalne), wywołuj je w dowolnym momencie. Dlatego po załadowaniu nowych danych i utworzeniu nowych elementów należy ponownie wywołać te funkcje.
Te funkcje to te, w których powiązałeś zdarzenia i elementy działań.
źródło
Dołączyłem link do elementu DIV i chciałem wykonać kilka czynności po kliknięciu. Dodałem kod poniżej dołączonego elementu w DOM, ale nie zadziałał. Oto kod:
To nie działało. Następnie umieściłem kod jQuery wewnątrz $ (document) .ready i działało idealnie. Tutaj jest.
źródło
Zdarzenie ready występuje po załadowaniu DOM (model obiektowy dokumentu).
Ponieważ to zdarzenie ma miejsce po przygotowaniu dokumentu, jest to dobre miejsce na wszystkie inne zdarzenia i funkcje jQuery. Jak w powyższym przykładzie.
Metoda ready () określa, co się stanie, gdy wystąpi zdarzenie ready.
Wskazówka: metody ready () nie należy używać razem z.
źródło