Javascript kann nicht auf textfeld zugreifen

...komplette Frage anzeigen

2 Antworten

Das hängt mit der Sequenz des Abarbeitens einer HTML-Seite zusammen. Javascript-Schnipsel und -Dateien werden so, wie sie im HTML-Text auftauchen, abgearbeitet. Wenn Du einen Javascript-Block VOR (!) der Definition von Elementen im nach(!)-folgenden HTML einfügst, kannst Du innerhalb dieses Blocks nicht unmittelbar auf Elemente des nachfolgenden HTML zugreifen.

"Unmittelbar" heißt, daß die Anweisungen direkt ausgeführt werden, nicht nur von der Javascript-Engine vorcompiliert. Zum Beispiel wird folgendes, WENN (!) es auf der "äußersten" Ebene des Quelltextes steht, daß heißt NICHT (!) innerhalb eines Funktionskörpers, unmittelbar ausgeführt:

var x = document.getElementById();

Eine Funktions-Definition (nur die Definition, ohne einen Aufruf der Funktion von außen) dagegen kommt in diesem Sinne nicht "unmittelbar" zur Ausführung. Sie wird nur vom Javascript-Interpreter vorcompiliert und wartet dann auf ihren Aufruf:

function f()
{
    var x = document.getElementById();
    ...(mach irgendwas mit x)
}

Wenn allerdings diese Funktion wiederum unmittelbar aus so einem vorgezogenen Block heraus aufgerufen wird, gehört sie sehr wohl zum unmittelbar ausgeführten Code:

function f()
{
    var x = document.getElementById();
    ...(mach irgendwas mit x)
}

...(irgendwelcher andere Unsinn)

f();

Die Lösung besteht darin, in vorgezogenen Codeabschnitten, die man im Head-Bereich eines HTML-Dokuments einbinden läßt, grundsätzlich nur Funktionen definieren zu lassen, wenn dort bereits Zugriffe auf das (erst später geladene) Dokument kodiert werden sollen.

Die Funktionen werden dann "verzögert" über Reaktionsfunktionen (z.B. onload, onclick und solche Sachen) aufgerufen.

Reaktionsfunktionen werden vom Browser in aller Regel erst dann ausgelöst, wenn das Laden des gesamten HTML-Dokuments abgeschlossen ist.

Wäre einfacher, wenn man den Code komplett sehen würde

Versuch es mit document.getElementById("TextfeldId").value

Was möchtest Du wissen?