Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Kolejność wykonywania skryptu, Skrypt w head, $('document').ready i brak ustawionej wyso
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sowiq 18.02.2009, 20:27:08
Go to the top of the page
+Quote Post
Rafal Filipek
post
Post #3





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
starach
post
Post #4





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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. (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
mls
post
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 13:14