molily: Chekbox

Beitrag lesen

Hallo Timur,

ich würde das so lösen:
http://molily.de/temp/checkboxLimit.html

Erstmal die Voraussetzungen:

  • Initialisierung über JavaScript beim onload
  • Keine Inline-Event-Handler, sondern Event-Delegation. Klick-Ereignisse werden beim darüberliegenden Element zentral überwacht.
  • Die verschiedenen Funktionen werden in einem Container-Objekt gruppiert (das heißt checkboxLimit).

init - Startfunktion, die beim erfolgreichen Laden des Dokuments ausgeführt wird
aktualisiere - Helferfunktion, die die Checkboxen durchgeht und den disabled-Status aktualisiert
checkboxKlick - Event-Handler, der alle Klicks in der Checkboxen-Liste verarbeitet
limitÄnderung - Event-Handler, der die Änderung des Limit-Feldes überwacht

Okay, was machen die Funktionen?

init:
Registriere die Event-Handler für die entsprechenden Elemente

checkboxKlick:
Zuerst wird geschaut, ob es sich beim angeklickten Element um ein input-Feld handelt. Wenn nicht, bricht die Funktion ab, schließlich soll sie nur Klicks auf die Checkboxen verarbeiten.
Dann wird das Limit aus dem entsprechenden Feld ausgelesen. Wenn keines angegeben ist, wird eine Meldung ausgegeben und die Funktion bricht ab.
Wenn ein korrektes Limit eingegeben wurde, wird es in der Eigenschaft limit des Container-Objektes checkboxLimit gespeichert. Schließlich wrd aktualisiere aufgerufen.

limitÄnderung:
Wert des Feldes wird ausgelesen. Wenn der brauchbar ist, wird aktualisiere aufgerufen.

aktualisiere:
Hole die Liste der Checkboxen mit getElementsByName. Speichere die in der Eigenschaft checkboxLimit.cbListe. Wenn in der Eigenschaft schon etwas drinsteht, wird getElementsByName nicht nochmal aufgerufen, sondern dieser Zwischenspeicher verwendet.
Durchlaufe die Checkbox-Liste. Erhöhe einen Zähler, wenn ein angekreuztes Feld gefunden wird. Nicht angekreuzte Felder werden in einem Array abgespeichert.
Prüfe anschließend, ob das Limit erreicht wurde, also die gezählten angekreuzten Felder so groß sind wie das Limit.
Jetzt durchlaufe den gerade angelegten Array mit allen nicht angekreuzten Feldern. Graue sie aus, wenn das Limit erreicht wurde, gebe sie frei, wenn das Limit noch nicht erreicht wurde.

Mathias