Autor Zpráva
exoslav
Profil
Čau,
mám tento kód:
var id = document.getElementById("moje_id");
document.write(id.nodeName);

<a id="moje_id">Ahoj</a>

ale nedaří se mi vypsat uzel. Nevíte, čím to je? Vypíše se mi následující chyba: Uncaught TypeError: Cannot read property 'nodeName' of null


Hmm, tak problém vyřešen jen na půl. Jde o to, že se mi javascript načítá dříve než dokument HTML. Tudíž to nenajde žádný prvek v DOM a vrátí hodnotu null (pokud tedy nepřesunu script z externího souboru a nedám ho na konec dokumentu, potom to funguje)... Kdyby mohl někdo poradit, jak vyřešit tento problém, bych bych rád. Děkuji.
Chamurappi
Profil
Reaguji na exoslava:
Dej skript na konec dokumentu. Dávat skripty do hlavičky je nepraktické.

pokud tedy nepřesunu script z externího souboru a nedám ho na konec dokumentu
K tomu, aby byl na konci, přeci nemusí být interní.
exoslav
Profil
Takže umístím odkaz na externí JS na konec dokumentu? Nevím, jestli se to může takhle udělat, ale funguje to. Díky za pomoc ;-)
peta
Profil
exoslav: Je to lepsi, predejdes spouste problemu.
V opacnem pripade bys to musel obalit do funkce a priradit do window.onload. Coz je desne neprakticke a hlavne se pak chodi spousta lidi ptat, co s tim, kdyz spoujuji 2 scripty, ktere oba prepisuji window.onload a funguje jen ten posledni. Kdyz to das na konec a nepouzijes window.onload, tak takovy problem resit nemusis u svych scriptu.
pcmanik
Profil
peta:
Máme tu aj DOMContentLoaded. Bohužial podpora až od IE9, takže tam treba využiť fallback.
Chamurappi
Profil
Reaguji na exoslava:
Nevím, jestli se to může takhle udělat
Může. Vždy mohlo. A bývá to i lepší, protože externí skripty brzdí načítání.


Reaguji na pcmanika:
Čekat na jakoukoliv událost je zbytečné, pokud jde pozice skriptu ovlivnit.

takže tam treba využiť fallback
… konkrétně by to byl atribut defer na <script>u.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: