Warum ist das length-Attribut hier null?

3 Antworten

Wann wird der Code ausgeführt? Evtl. ist die Seite zu dem Zeitpunkt nicht geladen

Twitchers04 
Fragesteller
 22.02.2024, 21:35

Ich habe in der HTML-Datei das Script-Tag im Head.

Edit:

Ok...das war das Problem, wenn ich das Script-Tag am ende hintue funktioniert es

0
coolerspecht342  22.02.2024, 21:37
@Twitchers04

Dann wird das ausgeführt bevor es vollst. geladen hat. Ne "unsaubere" Lösung ists den script tag kurz bevor du body schließt einzufügen

0
FaTech  23.02.2024, 00:00
@Twitchers04

Ich finde Scripte im body schrecklich. Meiner Meinung nach gehören die in den head. Schließlich ist das der Bereich, wo man sowas definiert. Deshalb kann ich das defer attribute empfehlen. Dann funktioniert es auch im head

2
dervieux  23.02.2024, 04:31
@FaTech

Google sagt etwas anderes;

"For scripts that are critical to the page contents and should be loaded first such as analytics, API, or authentication-type of scripts, it is recommended to place them in the head section of the HTML page. And other script tags should be placed at the bottom of the page before the closing </body> tag. "

0
FaTech  23.02.2024, 05:07
@dervieux

Naja, Google kann sagen was es will. Google holt es aus eine Quelle und man weiß jetzt nicht woher. Das defer attribute wurde ja auch nicht umsonst eingeführt

0
Erzesel  23.02.2024, 07:39
@FaTech

...oder man lässt eine "Main"-Funktion per:

<body onload="myFunction()">

...aufrufen. Das onload -Event wird getriggert, wenn die Seite vollständig geladen ist. Damit wäre absolut sichergestellt, dass , egal wo irgendwas "verstreut" ist , auch bereits vorhanden ist.

Keine Frage, "irgendwo verstreut" ist kein guter Programierstil , aber ich habe schon "Pferde vor der Apotheke...🤮" . Besonders wenn copy&paste das Zepter schwangen.

...und natürlich gibt's auch Situationen, wo Aktionen laufen sollen, bevor eine Aktion ausgeführt wird: https://www.w3schools.com/tags/ref_eventattributes.asp .

...Das lässt sich nicht immer über die Position des Script-Tag im HTML steuern.🤔

Auch C# usw. haben ähnliche Events, welche (normalerweise) nicht explizit behandelt werden.

Im Falle von Html/JavaScript ist es nunmal so herum, dass DOM und (JavaScript) programm zwei verschiedene "Schuhe" sind und das Script nur mit dem arbeiten kann, was bereits vorhanden ist.

...aber auch in anderen Sprachen baust Du das GUI auf, bevor Du am Ende die Main-Funktion aufrufst... Nur das der Ablauf da nicht so augenfällig ist, weil der Compiler die Reihenfolge optimiert.

(auch bei WPF/Maui/Qt/... wird die GUIdefinition abgearbeitet, bevor der Programmcode ( main() ) ausgeführt wird.)

1
Erzesel  23.02.2024, 07:55
@FaTech
Naja, Google kann....

Er hat schon irgendwie Recht, es gibt ne Menge Zeug, das ausgeführt werden könnte/sollte, bevor man mit dem Laden der Seite fertig ist. Allerdings wäre es aus meiner Sicht Schwachsinn mit mehreren Scripttags zu arbeiten... und defer ist auch kein Allheilmittel.

0

Es gibt da mehrere Probleme die auftreten können. Deswegen habe ich eine eigene Variante für dich gebastelt:

function addListeners() {
    document.addEventListener("DOMContentLoaded", ()=>{
        let fields = document.querySelector(".solutionField");
        console.log(fields);
        console.log(fields.length);   
        fields.forEach(element => {
            element.addEventListener("transitionend", toggleBorder);        
        });
        console.log("added");
    });    
}

Es können Probleme auftreten wenn das DOM nicht geladen wurde bzw. nicht die gesuchten Elemente.

Woher ich das weiß:Berufserfahrung – Ich bin gelernter Mediengestalter Digital und Print(IHK)

Eventuell ein Fehler in der Ausgabe Zeile.