Eine Checkbox aktiviert eine andere
Servus9
- javascript
Guten Morgen!
Ich habe eine Liste mit 6 Checkboxen.
Wenn einer der 5 oberen Checkboxen angeklickt wird, soll automatisch die 6. Checkbox auch aktiviert werden.
Wenn KEINE der 5 oberen Checkboxen aktiviert ist, soll auch die 6. deaktiviert sein.
Wie komm ich da am besten ran?
Viele Grüße, Thomas
Hallo Thomas,
Ich habe eine Liste mit 6 Checkboxen.
Wenn einer der 5 oberen Checkboxen angeklickt wird, soll automatisch die 6. Checkbox auch aktiviert werden.Wenn KEINE der 5 oberen Checkboxen aktiviert ist, soll auch die 6. deaktiviert sein.
Wie komm ich da am besten ran?
so die <input>-Elemente tatsächlich und direkt in einer http://de.selfhtml.org/html/text/listen.htm@title=Liste sind, reicht ein hier http://de.selfhtml.org/html/attribute/eventhandler.htm#uebersicht@title=onclick="deine_funktion(this)" als Attribut der Checkboxen aus. Innerhalb von deine_funktion() greifst Du auf http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode.parentNode.http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName('input') zu und überprüfst in einer Schleife jeweils, ob mindestens eine der ersten fünf Knoten angeklickt ist mittels Eigenschaft checked.
Gruß aus Berlin!
eddi
@@Edgar Ehritt:
nuqneH
Wie jetzt, du auch schon wieder wach?
Oder ein Vorta-Clon?
Qapla'
Morjens,
Wie jetzt, du auch schon wieder wach? Oder ein Vorta-Clon?
weder noch. Ich hatte schon gesehen, dass Du hier wieder Frühschicht machst. ;)
Ich habe derzeit einen anderen Schlafrhythmus.
Gruß aus Berlin!
eddi
Sorry, ich durchschaus nicht ganz, bin ein JS Laie und brauche das hoffentlich nimmer so schnell.
Mein Script addiert die Summen der einzelnen 5 Chackboxen zusammen und aktiviert nun bei anhaken eines Kästchens die Checkbox Nr. 6.
Aber wie schaffe ich es, das Nr. 6 wieder deaktiviert wird, wenn kein Haken mehr gesetzt ist?
<script type="text/javascript">
function addition(el,wert){
var summe = 0;
el.value2=wert;
var liste = el.form[el.name];
for(var i = 0; i < liste.length; i++)
summe += (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;
el.form.result.value = summe;
document.form1.cbox6.checked = true;
}
</script>
Aber wie schaffe ich es, das Nr. 6 wieder deaktiviert wird, wenn kein Haken mehr gesetzt ist?
Mit dem selben Mechanismus. Wenn du ausrechnest ob mindestens eine aktiviert ist, kriegst du doch auch raus wenn das nicht der Fall ist und dann deaktivierst du die wieder.
Ne andre Frage, was hast du damit denn vor? Das erinnert mich an die Checkboxen von Mailprovidern, mit denen man alle oder keine Mail anhaken kann. Es macht einen komischen Eindruck, vor allem wenn nur manche Mails angehakt sind, da ist dann nicht wirklich ersichtlich was diese weitere Checkbox genau macht.
Und in deinem Fall wundert mich auch wozu du die sechste überhaupt brauchst. Was passiert wenn man auf diese Checkbox klickt?
Lieber Encoder,
vielleicht will er ja soetwas wie einen Beleg anbieten, der nur dann einen Sinn hat, wenn zumindest eine der anderen Optionen ausgewählt wurde...?
Liebe Grüße,
Felix Riesterer.
Ja ... irgendwie hab ich da wohl was durcheinander gebracht. Die Frage war ja tatsächlich nach aktivieren/deaktivieren, das würde dann schon Sinn machen wie du schreibst.
Danach war nur noch von checked die Rede gewesen, was dann ja schon was anderes ist.
Was ich meinte, falls es eine Funktion "alle/keine auswählen" sein sollte, dazu würd ich lieber zwei Buttons statt einer Checkbox nehmen.
Re:
function addition(el,wert){
var summe = 0;
el.value2=wert;var liste = el.form[el.name];
for(var i = 0; i < liste.length; i++)
summe += (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;
el.form.result.value = summe;
/* hier sollte, wenn var wert immer größer als 0 ist,
also folgendes ausreichen */
document.form1.cbox6.checked = (summe!=0) ? true : false;
}
Gruß aus Berlin!
eddi
@@Edgar Ehritt:
nuqneH
document.form1.cbox6.checked = (summe!=0) ? true : false;
document.form1.cbox6.checked = (summe!=0);
Qapla'
Re:
document.form1.cbox6.checked = (summe!=0);
pfff...
document.form1.cbox6.checked = summe
So, letzte Haar auch noch gespalten. Jetzt ist die Lösung schön flauschig. ;-P
Gruß aus Berlin!
eddi
Hallo,
Ich habe eine Liste mit 6 Checkboxen.
Wie komm ich da am besten ran?
so die <input>-Elemente tatsächlich und direkt in einer http://de.selfhtml.org/html/text/listen.htm@title=Liste sind, reicht ein hier http://de.selfhtml.org/html/attribute/eventhandler.htm#uebersicht@title=onclick="deine_funktion(this)" als Attribut der Checkboxen aus. Innerhalb von deine_funktion() greifst Du auf http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=parentNode.parentNode.http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName('input') zu
und unabhängig von der Struktur des Markups bietet sich der Zugriff mit getElementsByName() eigentlich an. Da die Checkboxen zweckverwandt sind, haben sie ja vermutlich dasselbe name-Attribut.
und überprüfst in einer Schleife jeweils, ob mindestens eine der ersten fünf Knoten angeklickt ist mittels Eigenschaft checked.
Daran würde sich nichts ändern.
Ciao,
Martin
Lieber Martin,
und unabhängig von der Struktur des Markups bietet sich der Zugriff mit getElementsByName() eigentlich an. Da die Checkboxen zweckverwandt sind, haben sie ja vermutlich dasselbe name-Attribut.
ich dachte, dass das bei Radiobuttons so wäre, nicht unbedingt jedoch bei Checkboxen... weil sich bei Radiobuttons sinnvollerweise nur einer aus der Gruppe anwählen lässt, während bei den Checkboxen gerne auch mehrere angewählt werden können sollen.
SELFHTML bietet bei beiden Möglichkeiten Beispiele an, in denen ein identischer Wert im name-Attribut steht:
http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen@title=Pizzabelag (Checkboxen)
http://de.selfhtml.org/html/formulare/anzeige/input_radio.htm@title=Bezahlweise (Radiobuttons)
Wenn man dann serverseitig die Eingaben auswerten soll, kommt man bei PHP im Falle der Checkboxen eventuell in Schwierigkeiten... daher benutze ich bei Checkboxen i.d.R. verschiedene Namen (wenn auch mit gleichen Präfixen, oder mit eckigem Klammernpaar).
Wenn jetzt ein so abgeschicktes Checkbox-Formular mit PHP ausgewertet werden soll, dann ist es vielleicht zweckmäßig, zumindest name="auswahl[]" zu notieren, wenn nicht sogar verschiedene Namen zu vergeben. Und dann ist das "finden" der Checkboxen mittels JavaScript ganz schnell nicht mehr so einfach (wenn auch nicht wesentlich schwieriger)!
Ich weiß jetzt nicht, ob Thomas PHP verwendet, da es aber unter Hobbybastlern (wie ich auch) sehr populär ist, könnte das mit dem gleichen name-Attributwert für Thomas ein bedenkenswerter Umstand sein.
Liebe Grüße,
Felix Riesterer.
Hallo Felix,
Da die Checkboxen zweckverwandt sind, haben sie ja vermutlich dasselbe name-Attribut.
ich dachte, dass das bei Radiobuttons so wäre, nicht unbedingt jedoch bei Checkboxen...
nicht unbedingt bei Checkboxen, das ist richtig. Bei Radiobuttons führt der gleiche Name dazu, dass die Elemente vom Browser automatisch als Gruppe von Optionen behandelt werden, die sich gegenseitig ausschließen, während gleichnamige Checkboxen kein vergleichbares Verhalten auslösen.
weil sich bei Radiobuttons sinnvollerweise nur einer aus der Gruppe anwählen lässt, während bei den Checkboxen gerne auch mehrere angewählt werden können sollen.
Ja, das ist richtig. Trotzdem bin ich bestrebt, logisch zusammengehörende Daten auch in einer entsprechenden Datenstruktur zu sammeln - vorzugsweise einem (evtl. assoziativen) Array oder einem Objekt, in C auch einfach in einem struct.
SELFHTML bietet bei beiden Möglichkeiten Beispiele an, in denen ein identischer Wert im name-Attribut steht:
http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen@title=Pizzabelag (Checkboxen)
<input type="checkbox" name="zutat" value="salami"> Salami<br>
<input type="checkbox" name="zutat" value="pilze"> Pilze<br>
<input type="checkbox" name="zutat" value="sardellen"> Sardellen
Genau. Das ist ein Beispiel für nichtexklusive Auswahlmöglichkeiten. In JS kann ich über document.formular.zutat[n] (mit n=0,1,2) darauf zugreifen, in PHP könnte ich nur auf die letzte markierte Auswahl zugreifen, weil sie sich bei der Befüllung des $_GET-Arrays gegenseitig überschreiben. Da müsste ich name="zutat[]" notieren. Dann wird zwar die Adressierung mit JS umständlicher, aber man muss sich halt je nach Projekt entscheiden, welche Seite der Welt (Server- oder Clientseite) die wichtigere ist.
Wenn man dann serverseitig die Eingaben auswerten soll, kommt man bei PHP im Falle der Checkboxen eventuell in Schwierigkeiten...
Kommt drauf an (siehe oben).
Wenn jetzt ein so abgeschicktes Checkbox-Formular mit PHP ausgewertet werden soll, dann ist es vielleicht zweckmäßig, zumindest name="auswahl[]" zu notieren, wenn nicht sogar verschiedene Namen zu vergeben. Und dann ist das "finden" der Checkboxen mittels JavaScript ganz schnell nicht mehr so einfach (wenn auch nicht wesentlich schwieriger)!
Ich sehe, wir meinen eigentlich das gleiche. ;-)
Ich weiß jetzt nicht, ob Thomas PHP verwendet, da es aber unter Hobbybastlern (wie ich auch) sehr populär ist, könnte das mit dem gleichen name-Attributwert für Thomas ein bedenkenswerter Umstand sein.
Er hat seine Anfrage im Themenbereich JAVASCRIPT gestellt, also habe ich die Betrachtung aus PHP-Sicht mal ausgeklammert.
Schönes Wochenende,
Martin
@@Der Martin:
nuqneH
aber man muss sich halt je nach Projekt entscheiden, welche Seite der Welt (Server- oder Clientseite) die wichtigere ist.
Es müsste schon ein sehr spezielles Projekt sein, bei dem dies die Clientseite wäre.
Für übliche Webseiten gilt: serverseitige Formularauswertung ist obligatorisch, clientseitige optional.
Qapla'
Hallo Martin,
Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
immer wieder ein Brüller Deine Zufallssprüche. :)))
Gruß aus Berlin!
eddi
Hallo Eddi,
Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
immer wieder ein Brüller Deine Zufallssprüche. :)))
freut mich, wenn sie dir gefallen - obwohl ich ausgerechnet diesen nicht gerade für einen der besten halte. Vielleicht liegt's auch daran, dass ich ihn schon oft genug gelesen habe.
Und die Sammlung wächst. Langsam, aber stetig.
So long,
Martin
@@Der Martin:
nuqneH
Und die Sammlung wächst.
Schön, dazu beitragen zu können. (Um bei passender Gelegenheit herausgepickt zu werden.)
Qapla'
'ǝɯɐu$ ıɥ
Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
immer wieder ein Brüller Deine Zufallssprüche. :)))freut mich, wenn sie dir gefallen - obwohl ich ausgerechnet diesen nicht gerade für einen der besten halte. Vielleicht liegt's auch daran, dass ich ihn schon oft genug gelesen habe.
Und die Sammlung wächst. Langsam, aber stetig.
mal ne (dumme?) zwischenfrage, wie funktioniert das eigentlich mit dem einbinden von zufallssprüchen in die sig?
ssnɹƃ
ʍopɐɥs
Moin!
mal ne (dumme?) zwischenfrage, wie funktioniert das eigentlich mit dem einbinden von zufallssprüchen in die sig?
Das ist eigentlich ganz einfach und ist ansatzweise sogar in der Forums-Hilfe beschrieben.
Das aufgerufene Script auf meinem Webspace fällt dann über die Sammlung her, wählt einen Eintrag per Zufall aus und gibt ihn als Text zurück.
Ciao,
Martin
'ǝɯɐu$ ıɥ
mal ne (dumme?) zwischenfrage, wie funktioniert das eigentlich mit dem einbinden von zufallssprüchen in die sig?
Das ist eigentlich ganz einfach und ist ansatzweise sogar in der Forums-Hilfe beschrieben.
danke
Das aufgerufene Script auf meinem Webspace fällt dann über die Sammlung her, wählt einen Eintrag per Zufall aus und gibt ihn als Text zurück.
oh, also einfach ein PHP script das bei jedem aufruf einen spruch aus einer quelle (datenbank/array/datei)fischt und als text ausgibt (per echo();
)?
ssnɹƃ
ʍopɐɥs