Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JS]Prostacki błąd z document.getElementById
Forum PHP.pl > Forum > Przedszkole
MateuszS
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
SmokAnalog
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.
MateuszS
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.
lobopol
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)
MateuszS
Zawsze używałem jQuery. Tam chyba jest ten problem rozwiązany i dlatego teraz miałem problem gdy używam "czystego" JS
lobopol
Jeżeli używałeś dom.ready z jquery to tak
SmokAnalog
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.
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.