Alle Checkboxen mit einmal aktivieren
Michael Schmieder
- javascript
Hallo Forum,
ich versuche mich gerade in PHP durch learning by do it. Von Javascript habe ich leider überhaupt keine Ahnung.
Vorgeschichte:
Nach einer MySQL-Abfrage lasse ich die gefundenen Datensätze durch eine Schleife in einer Tabelle ausgeben. Jede Zeile beginnt mit einer Checkbox, die als value die id (den Primärschlüssel) des Datensatzes erhält. Der Benutzer soll nun durch Verwendung der Checkboxen die Ergebnismenge weiter einschränken können. Sinn der Sache: der Benutzer soll sich Adreßdatensätze zusammenstellen können, die dann zu einer Datenquelle für einen Serienbrief weiterverarbeitet werden. Über die URL kann man einen Blick in meine "Baustelle" werfen.
Um die Auswahl der Checkboxen zu beschleunigen, stelle ich eine Funktion per Javascript zur Verfügung, die alle Checkboxen mit einem Klick aktiviert.
Der Code dazu (natürlich nur ausgeliehen, nochmal Danke an den Schreiber):
<script language="JavaScript">
<!-- Begin
var checkflag = "false";
function check(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
return "Alle abwählen"; }
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
return "Alle wählen"; }
}
// End -->
</script>
Unten im Formular dann den Button:
<input type=button value=" Alle wählen" onClick="this.value=check(this.form.auswahl)"> (auswahl ist der name der Checkboxen)
Das Ganze funzt soweit.
Das Problem:
Um die Checkboxen auswerten zu können, muß ich sie in ein Array zusammenfassen, also aus
<input type='checkbox' name='auswahl' value='$id'>
wird
<input type='checkbox' name='auswahl[]' value='$id'>
Und damit kommt das Javascript-Script nicht mehr zurecht. Die Fehlermeldung ist: 'lenght' ist kein Objekt.
Der Fehler ist sicherlich der, daß die Variablen des Scripts nicht auf beliebig große Arrays vorbereitet sind. Ich habe die Logik von Javascript aber nicht begriffen, um es selber modifizieren zu können.
Frage: Kann jemand das Script für mich modifizieren (und am besten mal mit erklären, was er da tut?) oder hat jemand ein besseres Script zur Hand, das er mir zur Verfügung stellen würde?
Vielen Dank für Eure Mühe und (hoffentlich) Hilfe.
MfG Micha
<script language="JavaScript">
Da fehlt das type Attribut.
<!-- Begin
var checkflag = "false";
In JS gibt es true/false als Datentyp.
var checkflag = false;
function check(field) {
if (checkflag == "false") {
if (!checkflag) {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
checkflag = true;
Das ganez geraffel kannste dir aber sparen:
function check(field)
{
if(!field) return 'Fehler';
checkflag = !checkflag;
for (var i = 0; i < field.length; i++) field[i].checked = checkflag;
return checkflag ? "Alle wählen" : "Alle abwählen";
}
<input type='checkbox' name='auswahl' value='$id'>
wird
<input type='checkbox' name='auswahl[]' value='$id'>
Schon tausendmal da gewesen, ein bisschen suchen und du wärst auf:
<input
type=button value=" Alle wählen"
onClick="this.value=check(this.form['auswahl[]')">
gekommen.
Das näxte mal besser suchen ;-)
Struppi.
Ich nehme deinen Rüffel an. Ich habe schon ein paar Sachen dazu gefunden. Nur schlau bin ich nicht draus geworden ... So einigermaßen kann ich nachvollziehen, was Du geschrieben hast. Sieht plötzlich irgendwie logisch aus ... Ich danke Dir nochmal. War echt `ne schnelle Hilfe.
MfG Micha
PS: Was ist eigentlich "näxte"? ;-)
Hallo,
heute habe ich dann versucht, dein Script einzubinden. Also so:
<script language="JavaScript">
<!-- Begin
var checkflag = false;
function check(field)
{
if(!field) return 'Fehler';
checkflag = !checkflag;
for (var i = 0; i < field.length; i++) field[i].checked = checkflag;
return checkflag ? "Alle wählen" : "Alle abwählen";
}
in
<input type=button value=" Alle wählen" onClick="this.value=check(this.form['auswahl[]')">
hab ich noch eine eckige Klammer ergänzt
<input type=button value=" Alle wählen" onClick="this.value=check(this.form['auswahl[]'])">
Ergebnis: Das Script funktioniert und gibt keine Fehlermeldung aus. Wenn die Ergebnismenge leer ist, wechselt die Buttonbezeichnung nach dem Klick auf "Fehler".
Ich bin fett happy .... !!!!
MfG Micha
PS: Deinen Hinweis auf das fehlende type-Attribut habe ich nicht verstanden. Falls Du noch Lust hast ...
<script language="JavaScript">
PS: Deinen Hinweis auf das fehlende type-Attribut habe ich nicht verstanden. Falls Du noch Lust hast ...
<script type="text/javascript">
language ist ein veraltetes Attribut und nur nötig, wenn du Uralt-browser brücksichtigen willst, das gleiche gilt für den HTML Kommentar im Skript Block.
Struppi.
OK. Alles klar. Danke Dir nochmal
MfG Micha