Checkboxen überprüfen
Frank
- javascript
Ich weiß, dass dieses Thema schon einen Bart hat, aber alles was ich bisher dazu gefunden habe, hat mich nicht richtig weitergebracht, also habt erbarmen ;-)
Ich habe ein Formular mit 19 Checkboxen, die so benannt sind:
<input type="checkbox" name="produkt[]" value="blabla">
<input type="checkbox" name="produkt[]" value="bububu">
usw.
Ich möchte jetzt, dass der User mindestens eine davon anklickt, bevor er das Formular abschicken kann.
Bei Textfeldern ist das ja kein Problem
if (document.forms["formular"].elements["telefon"].value=="")
{
alert ("Bitte geben Sie Ihre Telefon-Nummer an!")
return false;
}
Aber wie genau muß diese Abfrage für Checkboxen aussehen?
Frank
Hallo Frank,
ich weiß nicht, ob meine Lösung nicht ein bisschen kompliziert ist, aber vielleicht hilft's:
Du baust ein Element um die Checkboxen, das du per id anspechen kannst, z.B.:
<div id="produkte">
<input type="checkbox" name="produkt[]" value="blabla" checked="checked">
<input type="checkbox" name="produkt[]" value="bububu">
<input type="checkbox" name="produkt[]" value="blublub" checked>
</div>
Und zum Checken gehst du die einzelnen Kinderobjekte von "produkte" durch:
function checkform(){
var msg="";
parentel=document.getElementById('produkte');
e=parentel.firstChild;
while(nextelement=e.nextSibling){
if(nextelement.value){
msg+=nextelement.value+': '+nextelement.getAttribute('checked')+"\n";
}
e=nextelement;
}
alert(msg);
}
Da sind auch andere Kinderelemente wie leere Text-Knoten innerhalb des div, deshalb die Abfrage if(nextelement.value).
Das heißt aber, da solten keine anderen Elemente, die einen Value haben können innhalb des <div>-Containers sein.
Viele Grüße
Andreas
Hallo Frank,
Ich möchte jetzt, dass der User mindestens eine davon anklickt, bevor er das Formular abschicken kann.
Spontane Idee: mit for-Schleife alle Checkboxen durchgehen und prüfen, bei vorhandenem value eine Boolean-Variable auf TRUE setzen und ggf. die Schleife abbrechen.
Nach Beendigung der Schleife die Boolean-Variable prüfen, bei TRUE wurde mindestens eine Checkbox angeklickt.
Beste Grüße
Richard
Danke für die Tipps, aber da ich nicht gerade der Programmierfachmann bin sind diese Lösungen wohl doch etwas zu kompliziert für mich :-(
Gibt's nicht etwas einfacheres, was man in so einem Fall standardmäßig einsetzen kann?
Bei den Textfeldern geht's doch auch...
Frank
OK, geht auch einfacher:
var checked=false;
for(var i=0; i<document.getElementsByName('produkt[]').length; i++){
if(document.getElementsByName('produkt[]')[i].checked==true){
var checked=true;
}
}
if(checked==false){
alert('Hey, Sie! Sie müssen gefälligst ein Produkt ankreuzen!');
}
Viele Grüße,
Andreas
Hallo Andreas,
super! Danke... Soweit so gut. Allerdings folgen jetzt zwei Alert Fenster direkt hintereinander und in der versendeten eMail wird "Array" anstatt der Produktname übermittelt...
Frank