Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Kolejność wykonywania skryptu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
starach
Spotkałem się z sytuacją która mnie lekko zdziwiła. Postaram się pokrótce ją opisać.

Skrypty JS zawsze wciskam w sekcję <head> dokumentu. Po zapoznaniu się ze stylem obiektowym w JS stało się to o tyle proste że całą funkcjonalność przerzucam na obiekty ( powiedzmy tworzę obiekt menu, a w nim umieszczam metody zajmujące się zdarzeniami ). Natomiast ich inicjalizacją zajmuje się osobny plik JS w którym umieszczam kod za to odpowiedzialny ( na przykład tworzenie obiektu i wykonanie metod przypisania zdarzenia ).

Teraz do sedna sprawy. W jQuery istnieje odpowiednik window.onload czyli funkcja ready() odpowiedzialna ona jest za wykonanie określonych zadań po załadowaniu dokumentu. Dzisiaj 2 godziny spędziłem na debugowaniu skryptu który nie miał dostępu do wysokości elementu DOM, bo ten nie był jeszcze do końca załadowany. Kiedy przeniosłem inicjalizację za miejsce ( pod ) w który ten element się znajdował, wszystko zaczęło działać.

Na razie prosiłbym was o to żebyście spróbowali mi jakoś wyjaśnić jak to się mogło stać że $("document").ready(function(){ kod }); wykonywał się kiedy właściwość height rzeczonego elementu DOM nie była jeszcze zdefiniowana. Jeśli nie będziecie w stanie to uproszczę kod i go tutaj wkleję.

Z góry dzięki za zainteresowanie tematem.
Pozdrawiam.
sowiq
Cytat(orglee @ 18.02.2009, 20:10:05 ) *
W jQuery istnieje odpowiednik window.onload czyli funkcja ready()
No właśnie nie tak do końca. window.onload zostanie wywołane po załadowaniu całego dokumentu. Np. IE wywoła zdarzenie dopiero po załadowaniu wszystkich obrazków. A jQuery'owe ready() wywoła się po załadowaniu samego kodu HTML (czyli drzewa DOM).

Teoretycznie opisana przez Ciebie sytuacja nie powinna się zdarzyć. Jedyne co mi przychodzi do głowy to to, że podczas wywoływania funkcji wysokość elementu jeszcze nie była znana, bo nie wszystkie właściwości zostały przypisane do elementów, ale to raczej głupi pomysł.

Próbowałeś czy zadziała z window.onload?

[edit]
http://docs.jquery.com/Events/ready :
Cytat
Binds a function to be executed whenever the DOM is ready to be traversed and manipulated.
Więc teoretycznie nie powinieneś mieć problemów.
Rafal Filipek
Niby szczegół oczywisty ale sporo osób zapomina o tym aby pliki js umieszczac po plikach css - to rółwnież moze powodować różnego rodzaju komplikacje.
starach
No i kaplica. Zapomniałem zachować kodu z błędem. I oczywiście nie sprawdziłem jeszcze czy działa na onload zamiast ready(). Przyjść na forum, wyżalić się ale użyć mózgu to już nie. sciana.gif Trudno ehh. Teraz będą pisał trochę więcej w JS więc może uda mi się reprodukować błąd.

Rafal Filipek@ Nawet nie wiedziałem że istnieje taka zależność. Zawsze dodaję skrypty po arkuszach stylu, ale jest to usankcjonowane zwyczajną kolejnością prac. Dzięki za zwrócenie uwagi na to.
mls
Ogólnie rzecz ujmując, najlepszą praktyką jest umieszczanie skryptów JS na samym końcu dokumentu HTML (wewnątrz <body>). Umożliwia to skrócenie oczekiwania na załadowanie treści strony (zwykle spowolnione właśnie pobieraniem skryptów JS) jak również daje tą pewność, że zachowana jest kolejność parsowania strony (CSS > BODY > JS).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.