Hallo alle zusammen!
Es futzt nur, wenn ich die erste checkbox auswähle. Wenn ich die checkboxen 2-12 wähle, kommt immer die Aufforderung, etwas auszuwählen. Von der Logik her, dürfte es aber nicht sein.
Abfrage: ist checkbox 1 oder checkbox 2 oder 3 oder .... oder 12 ausgewählt. Ich muß ja ein ODER enthalten haben, sonst wird ja überprüft, ob alle 12 ausgewählt sind.<script language="javascript">
<!--function auswahl() {
for (var i = 1; i <=11; i++)
{var x = document.nummern.elements;
if ((x[0].checked == true) (x[i].checked == true)) return true;
else { alert("Bitte waehlen sie etwas aus!"); return false; }}
}
// -->
</script>
Hallo Andre,
in deinern Gedankengängen steckt ein Denkfehler.
Die Abfrage if ((x[0].checked == true) (x[i].checked == true)) fragt ab, ob das erste oder das i-te Element angeklickt ist.
Hast du das erste Element aktiviert ist die Aussage wahr und durch den return true wird die Funktion abgebrochen und das Formular abgeschickt.
Dein Fehler steckt im else-Zweig. Ist weder Element 1 noch 2 aktiviert, ist die Aussage falsch, also
x[0].checked falsch und x[i].checked falsch. Durch das return false wird die Funktion abgebrochen und die Schleife nicht durchlaufen. Es werden also nur die ersten 2 Felder geprüft.
Änderst du das Script so ab:
<script language="javascript">
<!--
function auswahl() {
for (var i = 1; i <=11; i++)
{
var x = document.nummern.elements;
if ((x[0].checked == true) (x[i].checked == true)) return true;
}
alert("Bitte waehlen sie etwas aus!"); return false;
}
// -->
</script>
erfüllt es seinen gewünschten Zweck. Wird in der Schleife ein angeklicktes Feld erreicht, erfolgt der Abbruch der Funktion und die alert-Anweisung wird gar nicht ausgeführt. Wurde kein Feld ausgewählt, dann wird nach Beendigung des Schleifendurchlaufes die alert-Anweisung ausgeführt und dann das return false zurückgegeben. Das Formular also nicht abgeschickt.
Viele Grüße
Antje
PS: Einiges gibt es am Script noch zu verbessern, aber da du lernen willst mache ich es nicht.