for-Schleife bricht ab durch Zuweisung einer className
ssud
- javascript
Hallo zusammen,
Ich habe ein Problem mit einem vorzeitigen Abbruch einer for-Schleife, das offensichtlich durch eine Zuweisung eines CSS Klassennamens hervorgerufen wird. Habe leider keine Lösung im Internet gefunden. Meine JS Kenntnisse halten sich in Grenzen.
Ich habe folgendes JavaScript:
for(var i=1; i<=17; i++) {
if(printData[i]["a"] == null) {
printData[i]["a"] = "";
}
else {
if(printData[i]["a"].search(/\bmet\b/) != -1) {
printData[i]["a_label"] = "met";
document.getElementById(printData[1]["a_ID"]).className = "print-met";
}
else if(printData[i]["a"].search(/\bpartly_met\b/) != -1) {
printData[i]["a_label"] = "partly met";
document.getElementById(printData[1]["a_ID"]).className = "print-partly-met";
}
else if(printData[i]["a"].search(/\bnot_met\b/) != -1) {
printData[i]["a_label"] = "not met";
document.getElementById(printData[1]["a_ID"]).className = "print-not-met";
}
}
}
Darin soll der Wert eines assoziativen Arrays geprüft werden, falls dieser gleich null ist, soll er auf leer gesetzt werden, ansonsten soll unterschieden werden in die drei Fälle met, partly_met und not_met und abhängig davon ein Label vergeben werden und eine Klasse geändert werden.
Das Problem: Die Schleife läuft exakt solange durch bis das erste mal eine Klassenänderung durchgeführt werden soll, dann bricht sie ab. Kommentiere ich die Klassenänderungen aus, funktioniert das Script wie gewünscht.
Hat jemand eine Idee woran es liegen könnte?
Hallo ssud,
for(var i=1; i<=17; i++) {
der Index von Arrays läuft von 0 bis (Länge-1). Bist du sicher, dass du dich für das erste Element nicht interessierst und das Array 18 Elemente hat?
Ich würde hier
for(var i=0; i<printData.length; i++) {
schreiben.
Gruß, Jürgen
Hallo Jürgen,
Danke schonmal für Deine Antwort.
willst du wirklich im Arrayelement mit der Nummer 1 etwas ändern, oder soll hier ein i hin?
Das hatte ich probeweise in eine 1 geändert und vergessen. Es soll eigentlich ein i sein.
der Index von Arrays läuft von 0 bis (Länge-1). Bist du sicher, dass du dich für das erste Element nicht interessierst und das Array 18 Elemente hat?
Ich habe meinen Array von 1 aufwärts nummeriert, finde das persönlich intuitiver. Der Laufindex i sollte eigentlich richtig sein.
Grüße,
ssud
Hallo ssud,
dann lass mal den Laufindex per alert(i) ausgeben, damit du siehst, bei welchem Wert das Script aussteigt. Wie sieht denn printData aus? Was meldet die Fehlerkonsole? Gibt es ein Online-Beispiel?
Die Idee, den Laufindex von 1 bis L laufen zu lassen, mag für dich im Moment zwar intuitiver sein, aber alle mir bekannten Programmiersprachen (außer Fortran) zählen von 0 bis (L-1). Ich würde immer so zählen, wie es die verwendete Sprache vorsieht.
Gruß, Jürgen
Hallo Jürgen,
dann lass mal den Laufindex per alert(i) ausgeben, damit du siehst, bei welchem Wert das Script aussteigt.
Er zeigt nur den alert "1" an, d.h. gleich beim ersten Durchlauf bricht er ab.
Wie sieht denn printData aus?
Das Array wird aus einer anderen Funktion heraus erstellt mittels
printData = new Array();
printData = getPrintData();
Die Funktion getPrintData() weist "händisch" jedem Element des Arrays einen Wert zu und der Index 0 wird dabei nicht vergeben, deswegen bin ich mir sicher, dass die Nummerierung funktionsfähig, wenn auch nicht in Deinem Sinne korrekt, ist.
»»Was meldet die Fehlerkonsole? Gibt es ein Online-Beispiel?
Die Konsole meldet merkwürdigerweise garnichts. Ein Online-Beispiel gibt es leider nicht.
Grüße
Slobodan
»»Was meldet die Fehlerkonsole? Gibt es ein Online-Beispiel?
Die Konsole meldet merkwürdigerweise garnichts.
Konsole? Bist du sicher, dass du weißt wo du die Fehlerkonsole findest?
Struppi.
Hallo ssud,
noch was,
if(printData[i]["a"].search(/\bmet\b/) != -1) { printData[i]["a_label"] = "met"; document.getElementById(printData[1]["a_ID"]).className = "print-met";
^
willst du wirklich im Arrayelement mit der Nummer 1 etwas ändern, oder soll hier ein i hin?
Gruß, Jürgen
Hi there,
Hat jemand eine Idee woran es liegen könnte?
Wenn es so ist, wie Du sagst, dann kann es nur daran liegen, daß printData[i]["a_ID"] keine Id eines existierenden Objekts ist. Was sagt die Fehlerkonsole?
Ok, Problem ist gelöst. Das Script wurde im head Bereich des HTMl-Dokuments aufgerufen, allerdings werden die HTML-Objekte mit den IDs natürlich erst im body Bereich definiert. Somit konnten natürlich keine Klassen geändert werden, da zu diesem Zeitpunkt noch gar keine entsprechenden Objekte existieren.
Lösung: Führe Klasenänderung ganz am Ende des HTML Dokuments durch.
Dennoch verstehe ich nicht, warum JavaScript dann den ganzen Schleifendurchlauf abbricht und keine Fehlermeldung produziert.
Danke Jürgen für Deine Hilfe!
Grüße,
ssud
Dennoch verstehe ich nicht, warum JavaScript dann den ganzen Schleifendurchlauf abbricht und keine Fehlermeldung produziert.
Ich auch nicht, da dein Code in dem Fall einen Fehler produziert.
Struppi.
Hi,
Dennoch verstehe ich nicht, warum JavaScript dann den ganzen Schleifendurchlauf abbricht und keine Fehlermeldung produziert.
Es bricht ihn ab, *weil* ein Fehler aufgetreten ist - und meldet dir diesen auch in der JavaScript-Fehlerkonsole. Es sei denn, du hättest das explizit deaktiviert.
MfG ChrisB