Warum erhalte ich einen Fehler oder einen nicht erfassten Typfehler: Die Eigenschaft 'innerHTML' kann nicht auf null gesetzt werden. Ich dachte, ich hätte innerHTML verstanden und es vorher funktionieren lassen.
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script type ="text/javascript">
what();
function what(){
document.getElementById('hello').innerHTML = 'hi';
};
</script>
</head>
<body>
<div id="hello"></div>
</body>
</html>
javascript
onload
innerhtml
Joshua W.
quelle
quelle
Versuchen wir zunächst, die Grundursache zu verstehen, warum dies überhaupt geschieht.
Der Browser lädt immer das gesamte HTML-DOM von oben nach unten. Jeder in die
script
Tags geschriebene JavaScript-Code (imhead
Abschnitt Ihrer HTML-Datei vorhanden) wird von der Browser-Rendering-Engine ausgeführt, noch bevor Ihr gesamtes DOM (verschiedene im Body-Tag vorhandene HTML-Element-Tags) geladen wird. Die imhead
Tag vorhandenen Skripte versuchen, auf ein Element mit der ID zuzugreifen,hello
noch bevor es tatsächlich im DOM gerendert wurde. Daher konnte JavaScript das Element offensichtlich nicht sehen, und daher wird am Ende der Nullreferenzfehler angezeigt.Sie möchten die Meldung "Hallo" auf der Seite anzeigen, sobald der Benutzer zum ersten Mal auf Ihrer Seite landet. Sie müssen Ihren Code also an einem Punkt anschließen, an dem Sie sich völlig sicher sind, dass DOM vollständig geladen ist und auf das
hello
ID-Element zugegriffen werden kann. Es ist auf zwei Arten erreichbar:hello
ID-Element bereits geladen wurde. Sie können dies erreichen, indem Sie einfach das Skript-Tag nach allen DOM-Elementen verschieben, dh nach unten, wo dasbody
Tag endet. Da das Rendern von oben nach unten erfolgt, werden Ihre Skripte am Ende ausgeführt und es tritt kein Fehler auf.window.onload
Ereignis, das Ihnen den Hinweis gibt, dass der Browser das DOM vollständig geladen hat. Wenn dieses Ereignis ausgelöst wird, können Sie sicher sein, dass Ihr Element mit derhello
bereits im DOM geladenen ID und dem danach ausgelösten JavaScript, das versucht, auf dieses Element zuzugreifen, nicht fehlschlägt. Sie machen also so etwas wie das folgende Code-Snippet. Bitte beachten Sie, dass in diesem Fall Ihr Skript funktioniert, obwohl es oben in Ihrem HTML-Dokument imhead
Tag vorhanden ist.quelle
Sie könnten Javascript anweisen, die Aktion "onload" auszuführen ... Versuchen Sie Folgendes:
quelle
Setzen Sie einfach Ihre JS ein
window.onload
quelle
Javascript sieht gut aus. Versuchen Sie es auszuführen, nachdem das div geladen wurde. Versuchen Sie, nur auszuführen, wenn das Dokument fertig ist.
$(document).ready
in jquery.quelle
window.onload
mag ausreichen, aber es sind auch andere Veranstaltungen verfügbar.window
Der JavaScript-Teil muss ausgeführt werden, sobald die Seite geladen wurde. Es wird daher empfohlen, das JavaScript-Skript am Ende des Body-Tags zu platzieren
quelle
quelle
Hier ist mein Ausschnitt versuchen es. Ich hoffe es wird hilfreich für dich.
quelle
Sie können versuchen, die setTimeout-Methode zu verwenden, um sicherzustellen, dass Ihr HTML zuerst geladen wird.
quelle
Die Hauptursache ist: HTML auf einer Seite muss vor Javascript-Code geladen werden . Auf zwei Arten lösen:
1) Erlaube das Laden von HTML vor dem js-Code.
2) Verschieben Sie den js-Code unter den HTML-Code
quelle
quelle
Ich hatte das gleiche Problem und es stellte sich heraus, dass der Nullfehler darin bestand, dass ich das HTML, mit dem ich arbeitete, nicht gespeichert hatte.
Wenn das Element, auf das verwiesen wird, nach dem Laden der Seite nicht gespeichert wurde, ist es 'null', da das Dokument es zum Zeitpunkt des Ladens nicht enthält. Die Verwendung von window.onload hilft auch beim Debuggen.
Ich hoffe das war nützlich für dich.
quelle
Dieser Fehler kann auch dann auftreten, wenn Sie Ihr Skript nach Abschluss des HTML-Renderings laden. In diesem Beispiel Ihren Code
hat keinen Wert innerhalb der div. Der Fehler wird also ausgelöst, da im Inneren kein Wert geändert werden kann. Es hätte sein sollen
dann.
quelle
Fügen Sie jquery hinzu
< head>
Verwenden Sie $ document.ready () : Der Code kann sich in
< head>
oder in einer separaten Datei wie main.js befinden1) Verwenden von js in derselben Datei (fügen Sie dies in das hinzu
< head>
):2) Verwenden einer anderen Datei wie main.js (fügen Sie diese in die
< head>
):und füge den Code in die Datei main.js ein :)
quelle
Sie müssen sich ändern
div
inp
. Technisch bedeutet innerHTML, dass es sich innerhalb des<??? id=""></???>
Teils befindet.Veränderung:
in
Tun:
wird umkehren
das macht eigentlich keinen sinn.
Sie können auch versuchen, Folgendes zu ändern:
das mögen
damit es funktioniert.
quelle
Der Fehler ist selbsterklärend. Es wird nicht das HTML-Tag abgerufen, in dem Sie die Daten festlegen möchten. Stellen Sie das Tag also nur JS zur Verfügung. Dann können Sie Daten darauf festlegen.
quelle
Zweifellos sind die meisten Antworten hier richtig, aber Sie können dies auch tun:
quelle
Es gibt verschiedene mögliche Ursachen, wie besprochen. Ich möchte dies nur für jemanden hinzufügen, der möglicherweise das gleiche Problem wie ich hat.
In meinem Fall hatte ich einen fehlenden engen Div, wie unten gezeigt
Das Fehlen eines engen Divs kann zu einer Desorganisation der Übertragung von Kind zu Elternteil oder von Elternteil zu Kind führen, was zu einem Fehler führt, wenn Sie versuchen, auf ein Element im DOM zuzugreifen
quelle
Lassen Sie das DOM laden. Um etwas im DOM zu tun, müssen Sie es zuerst laden. In Ihrem Fall müssen Sie
<div>
zuerst das Tag laden . dann müssen Sie etwas ändern. Wenn Sie zuerst das js laden, versucht diese Funktion, dasHTML
zu tun, worum Sie gebeten haben, aber wenn diese Zeit geladenHTML
wird, kann Ihre Funktion das nicht findenHTML
. So können Sie das Skript am Ende der Seite platzieren. Innerhalb des<body>
Tags kann die Funktion dann auf das<div>
DOM zugreifen, da DOM bereits geladen ist, wenn Sie das Skript aufrufen.quelle