Frage von maxlllll, 57

Hey ich habe hier eine for Schleife bei die die meiner Meinung nach richtig ist aber nicht geht. Java-Script Danke wenn ihr sie verbessert :)?

Die Schleife soll div erzeugen und jedem div eine andere id geben. Ich komm nicht mehr zurecht

window.onload = function laden()  {
    for(var i = 0; i < 10; i++) {
            var elm = document.createElement("div");
            elm.id = "id"+i;
           
            document.getElementById("div-test").appendChild(elm);;
        }
        
    }
Antwort
von Sarkophator, 31

Das Script sollte so laufen, schließlich hat es ja auch in der Demo funktioniert die ich dir gepostet hatte.

Es sollte also drei mögliche Ursachen geben:

  • Es gibt einfach kein Element in deinem Markup mit der ID "div-test".
  • Du hast einen anderen Fehler in deinem Script, der die Ausführung des ganzen Scripts verhindert. Einfach überprüfen, indem du die Javascript-Konsole deines Browsers öffnet. (Normalerweise in den Entwicklertools die du über F12 erreichen kannst)
  • Das onload-Event wird nicht ausgeführt, weil es an anderer Stelle im Script überschrieben wurde. Um zu überprüfen ob das der Fall ist, kannst du mittels console.log("Test"); in der Funktion überprüfen, ob diese ausgeführt wird. (Die Ausgabe des Logs erfolgt in der o.g. Javascript-Konsole)Aus dem Grund sollte man Events immer möglichst über addEventListener binden! Außerdem eignet sich für dein Vorhaben das DOMContentLoaded-Event mehr, denn es wird aufgerufen wenn das Dokument fertig geladen und geparst ist und wartet nicht auf die Darstellung der Elemente. (Wie das onLoad-Event)https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListenerhttps://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
document.addEventListener("DOMContentLoaded", function() { /* ... */ });

Falls o.g. nicht weiterhilft, dann bräuchte man mehr Einblicke auf das Script, das Markup, die Ausgabe der Konsole und Co.

Kommentar von maxlllll ,

Ich bekomme in der Konsole 

null is not an object (evaluating 'document.getElementById("div-test").appendChild') 

Antwort
von heilwigkenner, 35

Da ist ein Semikolon zu viel. Hättest du einen Linter, oder würdest du debuggen, fiele das schneller auf.

<

p>Außerdem hat das Callback des onLoad-Events keinen Namen. Siehe https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onload.</p>

Kommentar von Sarkophator ,

Auch wenn es nicht unbedingt schön ist, doppelte Semikolons zu nutzen, sollte es für Javascript relativ egal sein ob er (an der Stelle) keins, eines, zwei oder hunderte Semikolons hinsetzt. Sie werden einfach als empty statements wahrgenommen und tun im Endeffekt nichts.

Und Event-Handler müssen nicht zwingend anonyme Funktionen darstellen, sie können auch benannte Funktionen sein die entweder über den Namen oder wie in dem Codebeispiel oben gebunden werden.

Antwort
von triopasi, 34

Kann es sein, dass 

elm.id = "id"+i;

so night geht, da i eine Zahl und "id" ein string ist?

Kommentar von Sarkophator ,

Javascript wandelt bei Konkatenation Werte nach Möglichkeit in einen String um, siehe Object.prototype.toString():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects...

bzw. Number.prototype.toString():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects...

Antwort
von perhp, 17

Da ist ein ; zu viel in der 3-letzten Zeile.

Antwort
von BiggerMama, 27

Was ist var?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten