Calocybe: Checkboxüberprüfung scheitert im NC 4.5

Beitrag lesen

Hallo Torsten

OK, also das hier ist, was Du geschrieben hast, nur etwas anders formatiert.

=======================
// Hier kommt jetzt das für das Testfeld
    if (!check_auswahl(document.form.testfeld1.value)) {
        validity = false;
        alert('Testfeld1 ist leer');
    }

if (validity)
         alert ("Alle benötigten Informationen wurden geprüft. "
                 + "Die Eingaben wurden als richtig erkannt "
                 + "Mail Delivery Sub-System.");

return validity;
}

//Jetzt Deine angepasste Funktion

function check_auswahl() {
    var check = 0;
    
    for (i=0; i<document.form.testfeld1.length; i++)  
        if (document.form.testfeld1[i].checked == true)
            check = 1;
        else if (check == 1) {return true}

return false;
}

Als erstes faellt auf, dass Du beim Aufruf der Funktion check_auswahl() einen Parameter uebergibst, den die Funktion gar nicht haben will. Ich wurde Dich an des Browsers stelle heftig beschimpfen ;-)

Soweit sieht es schon ganz gut aus, bis auf einen Fehler in der zweiten Funktion (ich gehe davon aus, Du willst ueberpruefen, ob mindestens eine Checkbox angekreuzt ist). Bei jedem Schleifendurchgang wird geprueft, ob die aktuelle Checkbox checked ist; wenn ja wird check=1 und mit der naechsten Checkbox weitergemacht. Nur wenn diese jetzt NICHT angekreuzt ist, wird nochmal geschaut (im else-Zweig), ob die VORHER ueberpruefte Box angekreuzt WAR, und falls ja, wird true returned. Die Funktion gibt immer dann true zurueck, wenn die eine Checkbox angekreuzt ist UND die darauffolgende nicht, ansonsten immer false. Aehem naja, ziemlich konfus, wuerde ich sagen. Versuch's lieber mal so:

function check_auswahl() {
    for (i=0; i<document.form.testfeld1.length; i++)  
        if (document.form.testfeld1[i].checked)
            return true;

return false;
}

Im Prinzip ist es das, was Stefan geschrieben hat. Fuer den Fall, dass Du jetzt aus Platzspar- und Wiederverwendbarkeitsgruenden unbedingt das zu testende Feld als Parameter uebergeben willst, sieht's halt so aehnlich aus:

function check_auswahl(field) {
    for (i=0; i<field.length; i++)  
        if (field[i].checked)
            return true;

return false;
}

Ob das jetzt wirklich so funktioniert, weiss ich aber nicht.

Allgemein wuerde ich sagen, dass Checkboxen von Natur aus Singles sind (werden also unabhaengig von anderen ein- und ausgeschaltet) und deshalb jeweils einen Namen fuer sich allein verdient haben (bei Dir haben alle denselben). Fuer Deine Zwecke sind Radiobuttons wohl besser geeignet. Das merkt man spaetestens, wenn man dieses FORM an ein Perlscript oder sonstiges submitted.

Calocybe