[jQuery] Gruppe von Checkboxen prüfen und Attribut ändern
Gunther
- javascript
Hallo Selfgemeinde!
Aufgrund eines kleinen Mini-Projektes will auch ich mich mal näher mit jQuery beschäftigen. Leider sind schon meine Javascript Kenntnisse etwas eingerostet.
Ich habe mir also zunächst die aktuellste jQuery Version (1.2.6) runtergeladen und ebenfalls ein Checkbox Plugin (http://www.texotela.co.uk/code/jquery/checkboxes/), mittels dessen man u.a. Checkboxen mit gleichem Namen sich wie Radiobuttons verhalten lassen kann.
Das ist schon meine halbe Miete, denn ich habe X Blöcke mit jeweils den gleichen Optionen, von denen jede aber entweder gar nicht oder nur in einem Block ausgewählt sein darf.
Jetzt stehe ich aber vor dem Problem, dass ich gerne noch folgendes machen würde:
Bei jeder Veränderung der Checkboxen soll geprüft werden, ob jeweils aus einer Gruppe gleichnamiger Checkboxen eine ausgewählt ist oder nicht. Ist eine ausgewählt, sollen die anderen Checkboxen aus der Gruppe bspw. disabled werden.
Aufgrund des o.g. Plugins haben die Checkboxen einer Gruppe alle den gleichen Namen (name), aber ich habe bspw. noch das ID-Attribut zur freien Verfügung.
Könnte mir bitte jemand erklären, wie ich diese Überprüfung realisieren kann, und dann die 'gecheckte' Checkbox aus dieser Gruppe ausnehmen kann?
Vielen Dank für eure Hilfe!
Gruß Gunther
Hallo,
Bei jeder Veränderung der Checkboxen soll geprüft werden, ob jeweils aus einer Gruppe gleichnamiger Checkboxen eine ausgewählt ist oder nicht. Ist eine ausgewählt, sollen die anderen Checkboxen aus der Gruppe bspw. disabled werden.
Allen Checkboxen einen change-Handler geben:
Wenn Checkbox checked ist:
input[name=namedergeändertencheckbox]:checked suchen
gegenwärtige Checkbox aus der Liste ausschließen (not)
Elemente in der Liste auf disabled setzen
Aufgrund des o.g. Plugins haben die Checkboxen einer Gruppe alle den gleichen Namen (name), aber ich habe bspw. noch das ID-Attribut zur freien Verfügung.
Hm? Wozu meinst du das zu brauchen?
Mathias
Hallo Mathias!
Allen Checkboxen einen change-Handler geben:
Wenn Checkbox checked ist:
input[name=namedergeändertencheckbox]:checked suchen
gegenwärtige Checkbox aus der Liste ausschließen (not)
Elemente in der Liste auf disabled setzen
Danke für den Hinweis. Ich habe es jetzt auch tatsächlich hinbekommen, allerdings nur dadurch, dass ich das Plugin selber entsprechend abgeändert habe, denn so ganz verstanden habe ich das (die jQuery Syntax) noch nicht.
Frage: Gibt es irgendwo im Netz auch ein "vernünftiges" Einsteigertutorial?
Die ganzen Links auf der jQuery Seite sind ja mehr oder weniger alles Einzelbeispiele und kein richtiges Tutorial. Oder wie "erlernt" man den Einsatz und den Umgang mit jQuery am besten?
Aufgrund des o.g. Plugins haben die Checkboxen einer Gruppe alle den gleichen Namen (name), aber ich habe bspw. noch das ID-Attribut zur freien Verfügung.
Hm? Wozu meinst du das zu brauchen?
Hmmm ..., stammt wohl von einer stark durch CSS geprägten Denkweise ab. ;-)
Gruß Gunther
Hallo,
Frage: Gibt es irgendwo im Netz auch ein "vernünftiges" Einsteigertutorial?
Hehe. Du weißt, was ich von Frameworks halte und warum? ;)
Oder wie "erlernt" man den Einsatz und den Umgang mit jQuery am besten?
Na, soviele Elemente von jQuery musst du für die üblichen Aufgabe nicht kennen.
Wenn du möchtest, kann ich dir mal die Funktion jQuery.radioCheckboxGroup erklären. Dort hast du vermutlich einfach this.checked = false; auf this.disabled = true gesetzt, oder? (Wie wirst du das wieder los, wenn die Checkbox abgewählt wird?)
Mathias
Hallo,
danke für die Erklärungen - die helfen mir weiter, als alles, was ich bisher so gefunden/ gelesen habe.
Wenn du möchtest, kann ich dir mal die Funktion jQuery.radioCheckboxGroup erklären. Dort hast du vermutlich einfach this.checked = false; auf this.disabled = true gesetzt, oder? (Wie wirst du das wieder los, wenn die Checkbox abgewählt wird?)
Fast ... ;-)
Folgendes habe ich gemacht:
if(this.checked == true) {
// uncheck every other box with the same name
x.not(this).each(
function()
{
this.checked = false;
this.disabled = true;
}
).end();
}
else {
// uncheck every other box with the same name
x.not(this).each(
function()
{
this.checked = false;
this.disabled = false;
}
).end();
}
Erfüllt immerhin seinen Zweck.
Die Funktion als solches habe ich (glaube ich zumindest) auch verstanden. Ich tue mich nur noch ein bischen schwer mit der Syntax, beim Versuch eigene Sachen/ Funktionen zu schreiben.
Als nächstes würde ich die Funktion gerne noch so abändern, dass ich nicht für jede Checkbox-Gruppe einen eigenen Funktionsaufruf mit dem Namen brauche, sondern einen Filter verwenden (o.ä.) kann (bspw. einen bestimmten Classname oder so etwas) und sich die Funktion dann den Namen selber holt (this.attr('name')).
Für weitere Hilfe & Tipps wäre ich dir sehr dankbar.
Gruß Gunther