Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][JS]Prostacki błąd z document.getElementById
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, nie wiem co się dzieje, ale przestał mi działać JavaScript a raczej jego elementy. Zobaczcie na prosty kod poniżej:

data.js
[JAVASCRIPT] pobierz, plaintext
  1. var input_data = document.getElementById("data");
  2. input_data.value="asd";
[JAVASCRIPT] pobierz, plaintext


index.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <title>Projekt JS</title>
  3. <meta name="Content-Type" content="text/html;charset=UTF-8" />
  4. <script type="text/javascript" src="data.js"></script>
  5. </head>
  6. Data: <input type="text" id="data" />
  7. Godz: <input type="text" id="godz" style="width: 100px" />
  8. <input type="button" value="Sprawdź" />
  9. </body>
  10. </html>


Wiadomo co to powinno robić. Po odświeżeniu strony w polu input o id="data" powinno się pojawić "asd". Z tym że JS odmawia posłuszeństwa. Konsola wyrzuca:

Kod
Uncaught TypeError: Cannot set property 'value' of null


//Wiem że TERAZ javascript się bulwersuje gdy próbujemy dostać się do obiektu zanim jeszzce wczyta się reszta HTMLa (wrzucenie skryptu na koniec dokumentu naprawia ten problem) ale nigdy z tym nie było problemu. JS widział zawsze jakby cały plik niezależnie od tego gdzie <script> był includowany (zawsze robilem to w head)


Pisałem takie rzeczy tysiące razy i zawsze śmigało. Może faktycznie czegoś zapomniałem, dawno nie pisałem niczego w JS ale chyba aż tak nie zardzewiałem. Pozdrawiam

Ten post edytował MateuszS 8.06.2013, 16:04:38
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Przyczyna jest prosta - w momencie wykonywania skryptu, drzewo DOM nie jest jeszcze gotowe. Skrypt nie zna jeszcze elementu o ID = data. Załącz skrypt zaraz przed zamknięciem body i/lub zamknij go w zdarzeniu window.onload.
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Tak doszedłem do tego, z tym że nigdy nie miałem tego problemu. Zawsze includowałem w head (po to z resztą jest nagłówek żeby tam takie rzeczy robić) i nie było problemu. Zrobię tak jak piszeszesz.
Go to the top of the page
+Quote Post
lobopol
post
Post #4





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Skrypt odpala się zanim na stronie pojawi się ten input. Albo dodaj skrypt na końcu albo użyj jakiejś biblioteczki do dom ready (bądź sam to napisz)
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Zawsze używałem jQuery. Tam chyba jest ten problem rozwiązany i dlatego teraz miałem problem gdy używam "czystego" JS

Ten post edytował MateuszS 8.06.2013, 16:08:51
Go to the top of the page
+Quote Post
lobopol
post
Post #6





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Jeżeli używałeś dom.ready z jquery to tak
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Najlepiej zrobić i jedno, i drugie: skrypty zawierać na końcu i dodatkowo wywoływać je przy onload. Dla jQuery składnia jest elegancka:
[JAVASCRIPT] pobierz, plaintext
  1. $(function() {
  2. ...
  3. });
[JAVASCRIPT] pobierz, plaintext

Taki skrypt odpali się dopiero jak drzewo DOM jest gotowe.
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: 24.08.2025 - 13:43