Używam następującego kodu do wykonywania niektórych instrukcji po załadowaniu strony.
<script type="text/javascript">
window.onload = function () {
newInvite();
document.ag.src="b.jpg";
}
</script>
Ale ten kod nie działa poprawnie. Funkcja jest wywoływana nawet wtedy, gdy ładowane są niektóre obrazy lub elementy. Chcę wywołać funkcję, że strona jest ładowana całkowicie.
javascript
html
image
Neeraj Kumar
źródło
źródło
$(window).load()
alert
funkcję przed ponownym rysowaniem okna (dzięki czemu wygląda tak, jakby była wywoływana przed załadowaniem)? Kod wygląda dobrze, a zmuszanie użytkowników do pobierania dużych bibliotek prawdopodobnie nie rozwiąże tego problemu ani nie ułatwi diagnozy.Odpowiedzi:
to może działać dla Ciebie:
lub jeśli czujesz się komfortowo z jquery,
$(document).ready()
uruchamia się w DOMContentLoaded, ale to zdarzenie nie jest wywoływane konsekwentnie między przeglądarkami. Dlatego jQuery najprawdopodobniej zaimplementuje kilka ciężkich obejść, aby obsługiwać wszystkie przeglądarki. A to bardzo utrudni „dokładne” symulowanie zachowania przy użyciu zwykłego JavaScript (ale oczywiście nie jest to niemożliwe).jak zasugerowali Jeffrey Sweeney i J Torres, myślę, że lepiej jest mieć
setTimeout
funkcję przed uruchomieniem funkcji, jak poniżej:źródło
ready
nie zrobi tego, o co prosił OP.ready
uruchamia się, gdy DOM ładuje się, a nie po załadowaniu elementów.load
zapali się po zakończeniu ładowania / renderowania elementów.load
).setTimeout
to zły pomysł. Polega na ładowaniu strony poniżej 3 sekund (lub n sekund, w zależności od wybranej wartości). Jeśli ładowanie trwa dłużej, nie będzie działać, a jeśli strona ładuje się szybciej, będzie musiała czekać bez powodu.JavaScript
to samo dla jQuery:
UWAGA: - Nie używaj poniższego znacznika (ponieważ zastępuje on inne deklaracje tego samego rodzaju):
źródło
Jeśli możesz używać jQuery, spójrz na load . Następnie możesz ustawić funkcję tak, aby działała po zakończeniu ładowania elementu.
Weźmy na przykład pod uwagę stronę z prostym obrazem:
Program obsługi zdarzeń można powiązać z obrazem:
Jeśli chcesz załadować wszystkie elementy w bieżącym oknie, możesz użyć
źródło
load
metoda jQuery nie wiąże po prostu funkcji ze zdarzeniem load przy użyciu JavaScript? Czym miałoby się to różnić od tego, co już robi PO?addEventListener
zamiast wiązaćonload
właściwość DOM0 .Jestem trochę zdezorientowany, co masz na myśli mówiąc o zakończeniu ładowania strony, „wczytywaniu DOM” czy „ładowaniu treści”? W html załadowanie strony może wywołać zdarzenie po dwóch typach zdarzeń.
Ładowanie DOM: które zapewniają ładowanie całego drzewa DOM od początku do końca. Ale nie upewnij się, że ładujesz zawartość referencyjną. Załóżmy, że dodałeś obrazy za pomocą
img
tagów, więc to zdarzenie zapewnia, że wszystkieimg
załadowane, ale żadne obrazy nie zostały poprawnie załadowane lub nie. Aby otrzymać to wydarzenie należy napisać w następujący sposób:Lub używając jQuery:
Po DOM i załadowaniu treści: które wskazują również ładowanie DOM i zawartości. Zapewni to nie tylko
img
tag, ale także załadowanie wszystkich obrazów lub innych względnych treści. Aby otrzymać to wydarzenie należy napisać w następujący sposób:Lub używając jQuery:
źródło
DOMContentLoaded
obsługi zdarzeń @Hanif wydaje się nie robić nic dla mnie, aleload
robi.Jeśli chcesz wywołać funkcję js na swojej stronie html, użyj zdarzenia onload. Zdarzenie onload występuje, gdy agent użytkownika zakończy ładowanie okna lub wszystkich ramek w FRAMESET. Ten atrybut może być używany z elementami BODY i FRAMESET.
źródło
W ten sposób możesz obsłużyć oba przypadki - czy strona jest już załadowana, czy nie:
źródło
Alternatywnie możesz spróbować poniżej.
To działa w każdym przypadku. Będzie to wywoływane tylko wtedy, gdy zostanie załadowana cała strona.
źródło
O ile wiem, najlepiej jest założyć
Pierwsza odpowiedź dotycząca korzystania z tego
DOMContentLoaded
zdarzenia to krok wstecz, ponieważ DOM zostanie załadowany przed załadowaniem wszystkich zasobów.Inne odpowiedzi zalecają,
setTimeout
którym zdecydowanie się sprzeciwiam, ponieważ jest to całkowicie subiektywne dla wydajności urządzenia klienta i szybkości połączenia sieciowego. Jeśli ktoś jest w powolnej sieci i / lub ma wolny procesor, załadowanie strony może zająć od kilku do kilkudziesięciu sekund, więc nie można było przewidzieć, ile czasusetTimeout
będzie to wymagało.A jeśli chodzi o
readystatechange
to, odpala zawsze, gdy sięreadyState
zmieni, co według MDN będzie jeszcze przedload
wydarzeniem.źródło
źródło
Jeśli nie używasz żadnych frameworków JS, ten projekt jest najlepszym sposobem na uzyskanie stanu gotowego do domeny, z kompatybilnością z różnymi przeglądarkami
https://github.com/ded/domready/blob/master/ready.js
źródło
Jeśli korzystasz już z jQuery, możesz spróbować tego:
źródło
Mogę powiedzieć, że najlepszą odpowiedzią, jaką znalazłem, jest umieszczenie skryptu „sterownika” tuż po
</body>
poleceniu. Jest to najłatwiejsze i prawdopodobnie bardziej uniwersalne niż niektóre powyższe rozwiązania.Plan: Na mojej stronie jest tabela. Piszę stronę z tabelą do przeglądarki, a następnie sortuję ją za pomocą JS. Użytkownik może go użyć, klikając nagłówki kolumn.
Po zakończeniu
</tbody>
polecenia w tabeli i zakończeniu treści, używam następującego wiersza, aby wywołać sortowanie JS, aby posortować tabelę według kolumny 3. Otrzymałem skrypt sortowania z sieci, więc nie jest tutaj odtwarzany. Przynajmniej przez następny rok można to zobaczyć w działaniu, w tym w JS, pod adresemstatic29.ILikeTheInternet.com
. Kliknij „tutaj” u dołu strony. Spowoduje to wyświetlenie kolejnej strony z tabelą i skryptami. Możesz zobaczyć, jak umieszcza dane, a następnie szybko je posortować. Muszę to trochę przyspieszyć, ale podstawy są już dostępne.MakerMikey
źródło
Spróbuj tego jQuery :
źródło
ready
nie zrobi tego, o co prosił OP.ready
uruchamia się, gdy DOM ładuje się, a nie po załadowaniu elementów.load
zapali się po zakończeniu ładowania / renderowania elementów.wywołać funkcję po upływie określonego czasu ładowania strony
źródło
Zwykle używam następującego wzoru, aby sprawdzić, czy dokument został w pełni załadowany. Funkcja zwraca Obietnicę (jeśli potrzebujesz obsługi IE, dołącz polifill ), która zostanie rozwiązana po zakończeniu ładowania dokumentu. Używa
setInterval
pod spodem, ponieważ podobna implementacjasetTimeout
mogłaby skutkować bardzo głębokim stosem.Oczywiście, jeśli nie musisz wspierać IE:
Dzięki tej funkcji możesz wykonać następujące czynności:
źródło
Używam komponentów internetowych, więc działa dla mnie:
źródło
Umieść swój skrypt po zakończeniu tagu body ... to działa ...
źródło