Hallo,
ich verstehe den Sinn der Lösung nicht: Wenn man es realisieren will, dass immer nur eine Option angewählt ist, nimmt man Radiobuttons. Ferner ist es absolut benutzerunfreundlich, zu verbieten, eine Auswahl korrigieren zu können. Insofern ist mir unklar, welchen Nutzen das Spielchen haben soll.
Es gibt eine Checkbox, die allerdings im Gegensatz zu allen anderen Formelementen, nur einmal angeklickt werden darf.
Wieso?! Was, wenn der Benutzer sich umentscheiden möchte?
Wenn nun ein Anwender auf der Oberfläche ein zweites Mal diese checkbox aktivieren möchte, soll eine Fehlermeldung ausgegeben werden, dass im array schon ein checkbox=true vorhanden ist.
Wenn ein Benutzer die Checkbox ein weiteres Mal anklickt (*de*aktivieren möchte, meinst du wohl), müsstest du in deinem Array die Checkbox logischerweise ebenfalls auf false stellen, damit du am Ende, wenn du etwas mit dem Array anstellst (darauf läuft es anscheinend hinaus), den richtigen Wert gespeichert hast.
Wie greife ich von der Oberfläche in dieses Array für diese Abfrage??
Von welcher Oberfläche? Willst du wissen, wie du ein bestimmtes Element in einem Formular ansprichst oder suchst du http://selfhtml.teamone.de/javascript/objekte/elements.htm, speziell http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked? In deinem Beispielcode hattest du doch eine solche Abfrage mehr oder weniger gezeigt.
Falls du beim Klick auf eine Checkbox den jeweiligen Wert in einen Array schreiben willst:
<form name="formular">
<p><input type="checkbox" name="box" onclick="meinarray['checkbox']=this.checked"></p>
</form>
Falls du partout verhindern willst, dass die Auswahl geändert wird, fragst du ab, ob vorher bereits ein solches Arrayelement existiert bzw. ob es einen anderen Wert als den Ausgangswert hat. Da typeof(meinarray['checkbox'])==undefined anscheinend nicht klappt, sollte das Arrayelement vielleicht mit »leer« o.ä. besetzt werden: var meinarray=Array(); meinarray['checkbox']='leer'; Der Code dazu sähe folgendermaßen aus:
<form name="formular">
<p><input type="checkbox" name="box" onclick="if (meinarray['checkbox']=='leer') {meinarray['checkbox']=this.checked;} else {this.checked=true; window.alert('Sie können die Auswahl nicht mehr ändern!');}"></p>
</form>
Der JavaScript-Code ließe sich natürlich in eine Funktion auslagern.
Urmels Code lässt sich auch verbessern (d.h. damit er das tut, was er soll, unabhängig davon, ob es sinnvoll ist):
<script type="text/javascript">
var elemente = new Array();
elemente[0]='leer';
function check (triggobj){
if (elemente[0]=='leer') {
for (var i=0; i<document.hans.wurst.length; i++) {
if (document.hans.wurst[i].checked) {
elemente[0] = i;
}
}
} else {
if (document.hans.wurst[elemente[0]].checked) {
triggobj.checked = false;
window.alert("Sie hatten sich bereits fuer die "+(elemente[0]+1)+". Option entschienden!");
} else {
document.hans.wurst[elemente[0]].checked = true;
window.alert("Sie koennen den aktuellen Wert nicht mehr aendern!");
}
}
}
</script>
...mit...
<form name="hans">
<input type="checkbox" name="wurst" value="salami" onclick="check(this)">Salami<br>
<input type="checkbox" name="wurst" value="pilze" onclick="check(this)">Pilze<br>
<input type="checkbox" name="wurst" value="sardellen" onclick="check(this)">Sardellen
</form>
Grüße,
Mathias
»In anderen Newsgroups werden Pseudonyme akzeptiert, es handelt sich dabei meist um Gruppen, in denen sensible Themen (z.B. psychische oder peinliche Erkrankungen o.ä.) behandelt werden.«