[JavaScript] Skrypt na końcu body, a onload


(Luki_2) #1

Dlaczego umieszczenie ścieżki skryptu na końcu strony nie działa tak samo jak przypisanie skryptowi onload? Np. mam osobny plik JS, który poprzez document.getElementById pobiera mi ID elementu i przypisuje mu już napisaną funkcje wywołującą alert, i gdy przed document.getElementById dopisze " onload " to wszystko jest ok - działa jak powinno, jest elegancko. Jednak powinna być chyba możliwość po prostu załączenia pliku skryptu na końcu body i powinno mieć to takie samo działanie jak onload, ale… nie działa. Dlaczego zatem?


(Pablo_Wawa) #2

Po to są standardy kodowania, żeby pisać programy zgodnie z tymi wytycznymi (wtedy unikniesz niepotrzebnych problemów). Użycie

window.onload=

działa, ale nie jest zalecane choćby z tego powodu, że być może inny skrypt JS, z którego korzystasz (i włączasz w nagłówku strony HTML) też wymaga inicjalizacji po wczytaniu całej strony (i też używa window.onload), a takim kodowaniem możesz to po prostu popsuć.

Poza tym czym innym jest załadowanie całej strony (pliku HTML), a czym innym przetworzenie go do postaci drzewa DOM strony, na którym już może działać JS (to może mieć pewne opóźnienie i Twoja “metoda” z końca body nie zadziała) - to zdarzenie nazywa się onDOMContentLoaded.

Poza tym zamiast zdarzenia onload zaleca się korzystanie z funkcji obsługi zdarzeń addEventListener (a w IE z attachEvent) - poczytaj o tym w internecie.

http://javascript.info/tutorial/onload-ondomcontentloaded

http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/


(Luki_2) #3

Wiem że jest addEventListener, że jest to nowsza metoda i nią powinno się rozwiązywać takie kwestie. Pytam się z czystej ciekawości i ponieważ jestem nowicjuszem, testerem - podałem za przykład proste " onload ". Odpowiedź jest taka jak podejrzewałem, jednak zmylały mnie nawet w artykułach (!) wpisy typu " gdy dasz skrypt na końcu body, drzewo DOM załaduje się do końca wraz z dokumentem i skrypt wykona się na samym końcu ". Dzięki Ci za odpowiedź, właśnie takiej oczekiwałem :slight_smile:


(Pablo_Wawa) #4

Niestety czasami w internecie są artykuły zawierające nieścisłości i błędy, dlatego warto korzystać z kilku źródeł i to weryfikować.

Swego czasu w internecie było mnóstwo przestarzałych kursów JavaScript, uwzględniających specyficzne właściwości różnych przestarzałych przeglądarek (typu Netscape Navigator czy IE 5.0/5.5) - teraz warto jednak trzymać się standardów W3C.