2010-12-21 5 views
18
<html> 
<head> 
    <title>Test javascript</title> 

    <script type="text/javascript"> 
     var e = document.getElementById("db_info"); 
     e.innerHTML='Found you'; 
    </script> 
</head> 
<body> 
    <div id="content"> 
     <div id="tables"> 

     </div>   
     <div id="db_info"> 
     </div> 
    </div> 
</body> 
</html> 

Wenn ich alert(e); verwende, erscheint es null .... und offensichtlich bekomme ich keine "Sie gefunden" auf dem Bildschirm. Was mache ich falsch?Javascript kann Element durch ID nicht finden?

+0

zum Nachdenken stellen: Wann tut der Code-Block laufen JavaScript? Wann wird das DIV mit der ID "db_info" erstellt und/oder existiert es garantiert? –

Antwort

40

Das Problem ist, dass Sie versuchen, auf das Element zuzugreifen, bevor es existiert. Sie müssen warten, bis die Seite vollständig geladen ist. Ein möglicher Ansatz ist es, die onload Handler zu verwenden:

window.onload = function() { 
    var e = document.getElementById("db_info"); 
    e.innerHTML='Found you'; 
}; 

Die häufigsten JavaScript-Bibliotheken bieten ein DOM-Ereignis ready, though. Das ist besser, da window.onload auch auf alle Bilder wartet. Das brauchen Sie in den meisten Fällen nicht.

Ein anderer Ansatz besteht darin, das Skript-Tag direkt vor Ihrem schließenden </body> -Tag zu platzieren, da dann alles davor zum Zeitpunkt der Ausführung geladen wird.

+2

+1 für window.onload und für anonyme Funktion ^^ –

0

Das Skript wird ausgeführt, bevor das DOM des Körpers erstellt wird. Setzen Sie alles in eine Funktion und rufen Sie es aus dem onload des Körperelements.

1

Führen Sie den Code entweder im Onload-Ereignis aus, entweder kurz vor dem Schließen des Tags body. Sie versuchen, ein Element zu finden, das nicht in dem Moment vorhanden ist, in dem Sie es tun.

1

Woher weiß der Browser, wann er den Code innerhalb des Script-Tags ausführen soll? Also, um den Code auszuführen, nachdem das Fenster vollständig geladen ist,

window.onload = doStuff; 

function doStuff() { 
    var e = document.getElementById("db_info"); 
    e.innerHTML='Found you'; 
} 

Die andere Alternative ist Ihren <script...</script> kurz vor dem Schließen </body> Tag zu halten.

1

Skript wird aufgerufen, bevor Element existiert.

Sie sollten einen der folgenden Schritte versuchen:

  1. Wrap-Code in eine Funktion und einen Körper onload Ereignis zu nennen verwenden.
  2. Skript am Ende des Dokuments
  3. Verwendung defer-Attribut in Script-Tag Erklärung