Der Martin: Mit JS checkbox-array durchlaufen

Beitrag lesen

Mahlzeit,

Ich erzeuge mit PHP ein Formular, dieses kann eine variable Anzahl von Checkboxen enthalten.
Um es nicht unnötig aufzublähen, definiere ich die Checkboxen als Array:

<input type="checkbox" name="kat[]" value="2" onclick="chkdata()" />

<input type="checkbox" name="kat[]" value="7" onclick="chkdata()" />
<input type="checkbox" name="kat[]" value="13" onclick="chkdata()" />
usw...


> Die Auswertung nach dem Absenden erfolgt durch PHP und ist fehlerfrei.  
  
das ist ja schon mal viel wert.  
  

> Da ich aber vor dem Absenden per JS überprüfen möchte, ob mindestens eine Checkbox aktiviert worden ist, möchte ich dieses per Schleife durchführen lassen (siehe Aufruf onclick):  
  
Sinnvoller wäre es IMO, diese Prüfung erst beim Absenden durchzuführen (onsubmit im form-Element). Dann könnte man dort im Fehlerfall das Absenden verhindern und den Nutzer auf die fehlerhafte bzw. fehlende Eingabe hinweisen.  
  

> ~~~javascript

function chkdata() {  

> 	var arrCB = document.newUs.elements['kat[]'];

Erster Check hier: Zeigt arrCB jetzt wirklich auf das Array mit den Checkbox-Elementobjekten? Wurde das Formular anhand seines Namens newUs gefunden? Bedenke dabei auch, dass Javascript streng zwischen Groß- und Kleinschreibung unterscheidet.

ausgewaehlt="0";  

for (i = 0; i < arrCB.length; i++) {
if(arrCB[i].checked == true) { ausgewaehlt="1"; }
}
}

  
Das ist zwar sehr umständlich formuliert, und für eine Statusvariable einen String zu verwenden, wo ein boolscher Wert das Naheliegende wäre, ist nicht wirklich elegant. Aber vorausgesetzt, arrCB ist richtig initialisiert, sollte das trotzdem zum Erfolg führen. Etwas schöner IMO:  
  
~~~javascript
ausgewaehlt = false;  
for (i=0; i<arrCB.length; i++)  
   ausgewaehlt |= arrCB[i].checked;

Wenn man möchte, kann man es noch ein wenig kompakter und eleganter schreiben:

ausgewaehlt = false;  
for (i=0; i<arrCB.length; ausgewaehlt |= arrCB[i++].checked);

Leider ist aber der Status "ausgewaehlt" immer 0...
(und hier liegt mein Problem)
Ich gehe also einmal davon aus, das meine if-Bedingung fehlerhaft ist

Ich gehe eher davon aus, dass die Initialisierung von arrCB fehlerhaft ist, deswegen wäre das mein erster Prüfpunkt.

So long,
 Martin

--
Lache, und die Welt wird mit dir lachen.
Schnarche, und du schläfst allein.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(