![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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.
|
|
|
![]()
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. |
|
|
![]()
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).
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 13:14 |