|
|||
Alle Checkboxen aktivieren/deaktivieren
Hi,
bin schon etwas aus der Übung mit JavaScript, deswegen komme ich einfach nicht drauf, wo der Haken liegen soll. In der Browserconsole wird immer "undefinied" angezeigt, wenn ich einen Wert ausgeben lassen möchte. Ziel des Script soll sein, dass mit Klick auf einen Button, alle Checkboxen aktiviert bzw. deaktiviert werden sollen. Das Codeschnipsel was mir vorliegt, ändert alle momentanen Zustände einfach um. Geplant ist jedoch, dass wenn mind. eine Checkbox aktiviert wurde, dass dann alle Felder deaktiviert und beim nächsten Klick alle Felder aktiviert werden. Code:
function check() { var fields = document.forms["bestellung"].elements; for(var i=0; i<fields.length+1; i++) { var field = fields[i]; if(field.type == 'checkbox') { if(field.checked == false) { field.checked = true; } else { field.checked = false; } } } } <form id="bestellung" action="" method="post"> <input type="checkbox" name="bestellung[]" value="pizza" /><label>Pizza</label> <input type="checkbox" name="bestellung[]" value="eis" /><label>Eis</label> <input type="checkbox" name="bestellung[]" value="obst" /><label>Obst</label> <div onclick="check()">Check Button</div> </form> Dann habe ich versucht mit einer Variablen n abzufragen, ob mind. 1 Feld aktiviert wurde, wenn ja, dann dechecke alle, ansonsten aktiviere alle. Leider ist die Funktion ohne Auswirkung. Code:
for(var i=0; i<fields.length+1; i++) { var field = fields[i]; var n; if(field.type == 'checkbox') { if(field.checked == true) { n++; } } } alert(n); // gibt nichts aus for(var i=0; i<fields.length+1; i++) { var field = fields[i]; if(field.type == 'checkbox') { if (n >=1) field.checked == false; else field.checked = true; } } Vielleicht sieht jemand hier im Forum die Lösung. Vielen Dank. Roman Geändert von RomanM (04.06.2015 um 09:57 Uhr) |
Sponsored Links |
Sponsored Links |
|
|||
Genial, funktioniert! Vielen Dank!
Lag das jetzt an dem fields.length+1 in der for-Schleife? So eine knappe if-Abfrage (ist doch eine, oder?) Code:
field.checked = !(n >=1) |
|
||||
Nein, der Zugrosse Index war für dein Problem nicht relevant. Du hast n in der Schleife immer wieder neu intialisiert, das var n stand an der falsche Stelle.
und noch mal nein - das ist eine Typkonvertierung. Das Ausrufezeichen (ja es das gibt es auch in PHP) heißt "Nicht" (not) - es erzeugt das gegenteil des Vergleichs. Also wenn der Vergleich wahr ist, ist die Zuweisung false und umgekehrt. Wenn n größer 1 ist wahr ist, wird die Eigenschaft checked zu false. Man hätte es auch so schreiben können: Code:
field.checked = (n >=1) ? false : true; |
|
|||
Super, auch vielen Dank für die Erklärung, dann lerne sogar ich noch was auf meine alten Programmierertage.
Die Schreibweise "? false : true;" habe ich auch schon mal gesehen, wie nennt man denn diese verkürzte Schreibweise? |
|
||||
Der heißt Konditional-Operator, es ist eine bedingte Zuweisung (im gegensatz zum if Befehl der nichts zuweisen kann)
https://de.wikibooks.org/wiki/Websit...ional-Operator https://msdn.microsoft.com/en-us/library/e4213hs1.aspx |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Checkboxen per Ajax in ein Formular laden | speedracer | Javascript & Ajax | 2 | 10.09.2011 19:37 |
formular tabindex mit checkboxen usw... | sepp88 | (X)HTML | 6 | 13.01.2010 13:22 |
Liste (mit Checkboxen) in Spalten anzeigen | nonce | CSS | 10 | 04.04.2009 20:45 |
Checkboxen in Tabelle verschieben sich im IE | dooz | CSS | 4 | 03.06.2008 17:37 |
Checkboxen nebeneinander | radon | CSS | 5 | 21.11.2006 00:19 |