![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 19.08.2005
Beiträge: 115
|
In diesem Tutorial wird beschrieben, wie man eine Checkbox erstellt, die mehrere Checkboxen auf einmal markieren / demarkieren kann.
Logischerweise funktioniert so etwas nur mit Javascript, was bedeutet, dass User, die Javascript deaktiviert haben, die Checkbox auch nicht benutzen können. Wichtig: In diesem Tutorial wird nur beschrieben, wie man das Javascript baut. Wie ihr eine Liste mit Checkboxen macht, sollte euch also schon bekannt sein. Das Grundgerüst Hier ist ein Beispiel für ein Formular mit mehreren Checkboxen und einer Steuer-Checkbox, die allerdings noch keine Funktion hat: HTML-Code:
<form name="f" action="index.php" method="post"> <input name="feld[0]" type="checkbox" /> <input name="feld[1]" type="checkbox" /> <input name="feld[2]" type="checkbox" /> <input name="feld[3]" type="checkbox" /> <input name="feld[4]" type="checkbox" /> <input name="feld[5]" type="checkbox" /> <input name="feld[6]" type="checkbox" /> Alle Auswählen <input type="checkbox" /> </form> Das erleichtert auch das Auslesen der Checkboxen später in einer PHP-Datei. Schritt 1: Struktur der Funktion Wir benötigen als erstes die Funktion mark() (wie ihr die nennt ist euch natürlich überlassen). Aufgabe der Funktion ist es, alle Checkboxen mit einem bestimmten Namen entweder zu aktivieren oder deaktivieren, je nachdem ob eine andere Checkbox aktiviert ist oder nicht. Als Parameter werden also benötigt: Der Name der Felder und die Information: Aktivieren oder Deaktivieren. Nun kann man natürlich nicht alle Namen von allen Checkboxen, die gesetzt werden sollen übergeben. Viel einfacher ist es, wenn man einen Präfix übergibt, also einen Namen, mit dem alle Checkboxen anfangen. JavaScript Code:
Schritt 2: Erstellen einer Liste mit allen Checkboxen Leider lassen sich die Checkboxen nicht mit der Funktion document.getElementsByName() auslesen, da ihre Namen ja unterschiedlich sind. Stattdessen lesen wir einfach alle Elemente aus dem Formular aus, und überprüfen den Namen und den Typ. JavaScript Code:
In der for-Schleife werden dann alle Elemente nacheinander aufgerufen. Die Variable field gibt dann immer das aktuelle Feld an. Nun muss geprüft werden, ob der Name des Elements das Präfix aufweist und das Element auch eine Checkbox ist. JavaScript Code:
Schritt 3: Aktivieren / deaktivieren der einzelnen Felder und Aufruf der Funktion. Das Markieren der Felder ist dank der Variable check schnell getan, weil diese ja schon den gewünschten Zustand enthält. JavaScript Code:
Um die Funktion aufzurufen, wird die Checkbox, die nachher alles steuern soll, um das Attribut "onclick" erweitert: HTML-Code:
<input type="checkbox" onclick="mark(this.checked,'feld')" />
Zwischenstand Nun ist der Grundbau schon fertig. Wenn die Checkbox geklickt wird, übernehmen alle anderen Checkboxen, die mit einem bestimmten Präfix anfangen, automatisch ihren Status. Der Code könnte nun so aussehen: HTML-Code:
<script language="javascript" type="text/javascript"> function mark(check,praefix) { //Alle Elemente, die mit praefix beginnen werden auf check gesetzt. var fields = document.forms["f"].elements; for(i=0;i<fields.length;i++) { var field = fields[i]; if((field.name.substr(0,praefix.length) == praefix) && (field.type == 'checkbox')) { field.checked = check; } } } </script> <form name="f" action="index.php" method="post"> <input name="feld[0]" type="checkbox" /> <input name="feld[1]" type="checkbox" /> <input name="feld[2]" type="checkbox" /> <input name="feld[3]" type="checkbox" /> <input name="feld[4]" type="checkbox" /> <input name="feld[5]" type="checkbox" /> <input name="feld[6]" type="checkbox" /> Alle Auswählen <input type="checkbox" onclick="mark(this.checked,'feld')" /> </form> Wie ihr sicher schnell bemerkt habt, hat das Script noch einen entscheidenden Fehler: Sobald eine andere Checkbox als die Steuer-Checkbox geändert wird, stimmt der Status dieser nicht mehr unbedingt. Das ist zwar kein großes Problem, aber es kann u.U. den User verwirren. Die Aufgabe der zweiten Funktion ist es nun, zu überprüfen, ob der Status der Steuer-Checkbox noch stimmt und ihn entsprechend anpassen. Als Parameter brauchen wir nun zum einen die ID der Steuer-Checkbox (um sie nachher anzusprechen) und wieder ein Präfix für die Checkboxen, deren Status geprüft werden muss. JavaScript Code:
Schritt 5: Aufbau der zweiten Funktion Die Funktionsweise der Funktion ist wie folgt: Wenn mindestens eine Checkbox nicht ausgewählt ist, soll auch die Steuer-Checkbox nicht ausgewält sein. Wir setzten also zu Beginn eine Variable auf true (= alle Checkboxen sind aktiviert), die dann später auf false gesetzt wird, wenn eine Checkbox nicht aktiviert ist. Dazu benötigen wir wieder eine Schleife, die wir unverändert aus der ersten Funktion übernehmen können. JavaScript Code:
Die Steuer-Checkbox wird dann ausgewählt, wenn allchecked = true ist, sonst wird sie nicht gecheckt. JavaScript Code:
Für die Identifizierung muss als erstes der Steuer-Checkbox eine ID zugewiesenwerden: HTML-Code:
<input type="checkbox" id="all" onclick="mark(this.checked,'feld')" />
HTML-Code:
<input name="feld[0]" type="checkbox" onclick="test('all','feld')" />
Endstand Der vollständige Code kann nun so aussehen: HTML-Code:
<script language="javascript" type="text/javascript"> function mark(check,praefix) { //Alle Elemente, die mit praefix beginnen werden auf check gesetzt. var fields = document.forms["f"].elements; for(i=0;i<fields.length;i++) { var field = fields[i]; if((field.name.substr(0,praefix.length) == praefix) && (field.type == 'checkbox')) { field.checked = check; } } } function test(feld,praefix) { //Das Feld feld ist genau dann geckeckt, wenn ale Elemente, die mit praefix beginnen, gechekt sind. var allchecked = true; var fields = document.forms["f"].elements; for(i=0;i<fields.length;i++) { var field = fields[i]; if((field.name.substr(0,praefix.length) == praefix) && (field.type == 'checkbox')) { if(!field.checked) { allchecked = false; } } } document.getElementById(feld).checked = allchecked; } </script> <form name="f" action="index.php" method="post"> <input name="feld[0]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[1]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[2]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[3]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[4]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[5]" type="checkbox" onclick="test('all','feld')" /> <input name="feld[6]" type="checkbox" onclick="test('all','feld')" /> Alle Auswählen <input type="checkbox" id="all" onclick="mark(this.checked,'feld')" /> </form> Geändert von Buhmann (16.03.2006 um 14:35 Uhr). |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [PHP] FTP-Funktionen in PHP nutzen | MrNiceGuy | Tutorials | 0 | 24.05.2006 14:18 |
| Textfelder auf verschiedenen Tabs per Observer synchronisieren | Sayang | Desktop-Applikationen und Grafik | 2 | 05.12.2005 19:14 |
| [PHP] Aktuell gespielten Titel von XMMS auf einer Webseite in einer Grafik anzeigen | Corvin | Tutorials | 0 | 28.11.2005 16:26 |
| Forensoftware auf Version 3.5.1 aktualisiert | Ben | Archiv | 0 | 04.11.2005 01:51 |
| Login auf mehreren Domains | Homepagespeicher | PHP-Programmierung | 17 | 21.08.2005 16:54 |