checkbox - Alle auswählen
Katrin
- dhtml
Hallo,
ich habe eine Auswahl mehrer checkboxen die ich mit PHP in einer Schleife ausgebe. In $option steht drin ob die checkbox checked ist.
Das Funktioniert soweit auch.
echo '<input type="checkbox" name="nummer[]" value="'. $bestands_nr .'" ' .$option.'>';
Aber nun möchte ich am Ende eine weitere Checkbox einbauen wo ich alle Checkboxen auf true oder checked setze bloss ich weiß nicht wie ich das mit DOM machen soll? Muß ich hier noch eine id vergeben damit es funktionieren kann?
Weiß jemand Rat wie es gehen könnte?
Danke Katrin!
Hallo,
Weiß jemand Rat wie es gehen könnte?
Dazu kannst Du Javascript verwenden: Schreibe eine Funktion die eine for-Schleife beinhaltet. Diese geht alle Elemente Deines Formulares durch und versucht jedes Element auf checked zu setzen.
Muß ich hier noch eine id vergeben damit es funktionieren kann?
AFAIK nicht unbedingt, es reicht aus wenn Du Deinem Formular und Deiner Checkbox welche die Funktion auslöst eine eindeutige Bezeichnung über das Name-Attribut zuweist.
Grüsse AndreD
Hallo,
Weiß jemand Rat wie es gehen könnte?
Dazu kannst Du Javascript verwenden: Schreibe eine Funktion die eine for-Schleife beinhaltet. Diese geht alle Elemente Deines Formulares durch und versucht jedes Element auf checked zu setzen.
Muß ich hier noch eine id vergeben damit es funktionieren kann?
AFAIK nicht unbedingt, es reicht aus wenn Du Deinem Formular und Deiner Checkbox welche die Funktion auslöst eine eindeutige Bezeichnung über das Name-Attribut zuweist.Grüsse AndreD
Ein Problem habe ich allerdings noch
Die Checkbox muß ich ja in ein Array schreiben um es Clientseitig auszuwerten.
Und im Browser steht das folgends:
<input type="checkbox" name="nummer[]" value="01999" checked>
<input type="checkbox" name="nummer[]" value="02999" >
<input type="checkbox" name="nummer[]" value="03999" checked>
<input type="checkbox" name="nummer[]" value="04999" >
Dann kommt die Checkbox wo ich meine Funktion aufrufe:
<input name="all" type="checkbox" onChange="check()">
Und in meiner Funktion steht folgends:
<script type="text/javascript">
<!--
function check()
{
document.write('<input type="checkbox" name="nummer[0]" checked>');
document.write('<input type="checkbox" name="nummer[1]" checked>');
document.write('<input type="checkbox" name="nummer[2]" checked>');
}
//-->
</script>
Nur nun ist mein Problem darf ich name="nummer[]" schreiben?
<input type="checkbox" name="nummer[]" value="01999" checked>
Ich muß das irgendwie in ein array schreiben aber ich weiß nicht wie das bei JavaScript ist? Und dann muß auch irgendwie der value mit übermittelt werden? Ich dachte mit nummer[0] übermittelt er automatisch den Wert aber das ist nicht der Fall.
Hello,
Die Checkbox muß ich ja in ein Array schreiben um es Clientseitig auszuwerten.
Meinst Du da nicht eher serverseitig auswerten? :-)
Und im Browser steht das folgends:
Ist alles IMHO dafür nicht relevant... ausser die Bezeichnung für Dein Formular und der Checkbox welche Deine Funktion auslöst.
Dann kommt die Checkbox wo ich meine Funktion aufrufe:
<input name="all" type="checkbox" onChange="check()">
Ok, passt soweit denke ich.
Und in meiner Funktion steht folgends:
Ist IMHO der falsche Ansatz, versuche nicht in diesem Fall mit Javascript im HTML-Code "rumzumalen" :-) Javascript ist doch eigentlich viel mächtiger, Du kannst über die Baumstruktur (DOM-Model) gezielt die Eigenschaften aller Elemente einer Seite ändern, also auch den Zustand einer Checkbox auf checked setzen.
Schau mal in SelfHTML rein, da ist alles was Du dafür brauchst:
-> eine for-Schleife
http://selfhtml.teamone.de/javascript/sprache/schleifen.htm#for
Mit Hilfe der Schleife kannst Du dir z.B. alle Elemente (Checkboxen) eines Formulares ausgeben lassen, egal ob es 3 oder 467 sind.
-> Die Elemente
http://selfhtml.teamone.de/javascript/objekte/elements.htm
Kontrollieren aller Elemente eines Formulares
-> Die Anzahl
http://selfhtml.teamone.de/javascript/objekte/array.htm#length
Anzahl der Elemente in einem Array
-> Zustand des Elementes
http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked
Nur nun ist mein Problem darf ich name="nummer[]" schreiben?
<input type="checkbox" name="nummer[]" value="01999" checked>
Ja, das geht schon...
Grüsse AndreD
Ja es soll Clientseitig mit DOM ablaufen wie ich schon in meinem ersten Psoting schrieb.
Ich bin nun auch schon ein bischen weitergekommen
Meine Funktion:
<script type="text/javascript">
<!--
function check()
{
var a_liste = document.auswahl;
var len = a_liste.elements.length;
for (var i = 0; i < len; i++)
{
document.write('<input type="checkbox" name="nummer[i]" checked>');
}
}
//-->
</script>
Nur ich weiß nicht wie ich nun den value übergeben soll?
In name="nummer[i]" steht dann auch nummer[i] drin ich wollte aber was anderes ereichen das er i hochzählt. Das wird wahrscheinlich der falsche Aansatz sein aber ich weiß nicht so recht wie ich den namen und value aus den vorhandenen checkboxen auslesen soll?
Gruß Katrin
Hallo,
In name="nummer[i]" steht dann auch nummer[i] drin ich wollte
document.write halte ich für diesen Zweck immer noch falsch, aber
Dein Ansatz mit der Schleife ist m. E. so richtig, schau Dir doch speziell nochmal http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked an. Damit kannst Du auch erreichen daß das Element gecheckt wird, auch ohne document.write...
Wegen Deinem Problem: i ist in dem Fall auch eine Variable, nämlich der interne Zähler Deiner Schleife. Wenn Du diese nun in einem String ausgeben möchtest musst Du das + als Verbindungsoperator nutzen. Siehe auch http://selfhtml.teamone.de/javascript/sprache/operatoren.htm#zeichenkettenverknuepfung. In Deinem Fall sollte es so funktionieren: document.write('<input type="checkbox" name="nummer[' + i + ']" checked>');
Grüsse AndreD
Soweit so gut ich bin schon sehr nah dran aber nun zählt er in der Schleife mein i nicht mehr hoch.
Wenn ich anstatt i eine Zahl eingebe gibt er auch das richtige Ergebnis wieder.
aber das hochzählen meiner Schleife funktioniert nicht! Fehler gibt es keinen.
So sieht mein Script aus:
<script type="text/javascript">
<!--
function check()
{
var a_liste = document.auswahl;
var len = a_liste.elements.length;
len = len -1; // letze Checkbox darf nicht gezählt werden.
//document.write(len);
for (var i = 0; i < len; i++)
{
document.write('<pre>nummer[' + i + '] <b>ART_NR:</b> '+ document.forms[0].elements[i].value +'</b> <input type="checkbox" name="' + document.forms[0].elements[i].name +'" value="' + document.forms[0].elements[i].value +'" checked></pre>');
//document.write('<pre>nummer[' + i + '] <input type="checkbox" name="nummer[' + i + ']" value="' + document.forms[0].elements[i].value +'" checked></pre>');
//document.write('<pre>nummer[' + i + '] <input type="checkbox" name="nummer[' + i + ']" checked></pre>');
}
}
//-->
</script>
<form name="auswahl" method="post" action="">
<pre>1 <b>ART_NR:</b> 101111<input type="checkbox" name="nummer[0]" value="101111" checked></pre>
<pre>0 <b>ART_NR:</b> 102111<input type="checkbox" name="nummer[1]" value="102111" > </pre>
<pre>1 <b>ART_NR:</b> 103111<input type="checkbox" name="nummer[2]" value="103111" checked></pre>
<pre>1 <b>ART_NR:</b> 104111<input type="checkbox" name="nummer[3]" value="104111" checked></pre>
<pre>1 <b>ART_NR:</b> 105111<input type="checkbox" name="nummer[4]" value="105111" checked></pre>
<pre>0 <b>ART_NR:</b> 106111<input type="checkbox" name="nummer[5]" value="106111" > </pre>
<pre>0 <b>ART_NR:</b> 107111<input type="checkbox" name="nummer[6]" value="107111" > </pre>
<pre>1 <b>ART_NR:</b> 108111<input type="checkbox" name="nummer[7]" value="108111" checked></pre>
<pre>1 <b>ART_NR:</b> 109111<input type="checkbox" name="nummer[8]" value="109111" checked></pre>
<pre>0 <b>ART_NR:</b> 110111<input type="checkbox" name="nummer[9]" value="110111" > </pre>
<input name="all" value = "nummer" type="checkbox" onChange="check()"> Alle auswählen
<input type="image" type="submit" name="aendern" src="img.gif" alt="Artikel festlegen" border="0" width="28" height="22">
</form>
Wenn ich nun aber dies so schreibe:
document.write('<input type="checkbox" name="nummer[' + i + ']" checked>');
funktioniert es soweit auch nur ich bekomme den value nicht mit geliefert woher auch? Ich verstehe nicht was an meinem Script falsch ist?
Hallo,
funktioniert es soweit auch nur ich bekomme den value nicht mit geliefert woher auch? Ich verstehe nicht was an meinem Script falsch ist?
Ich glaub wir bewegen uns im Moment ein wenig im Kreis :-) Ich muss dazusagen das ich auch nicht der Chef in Javascript bin, aber da ich das schon mal irgendwann auch erstellt habe weiss ich das es zumindest bei mir schon mal funktioniert hat ;-) Und ich weiss auch das ich das _ohne_ document.write angegangen habe. Vielleicht habe ich Dich aber auch falsch verstanden, deshalb:
Nochmal zum Verständnis für mich: Du möchtest in einem bereit angezeigten Formular alle Checkboxen über eine Klick auf eine besondere Checkbox ebenfalls aktivieren (kreuzeln), oder?
Jetzt ist mir halt nicht ganz klar was Du die ganze Zeit mit document.write möchtest. Du kannst doch wie schon geschrieben die Elemente unmittelbar über die Eigenschaft checked beeinflussen?
Fragen über Fragen,
Grüsse AndreD
Jetzt ist mir halt nicht ganz klar was Du die ganze Zeit mit document.write möchtest. Du kannst doch wie schon geschrieben die Elemente unmittelbar über die Eigenschaft checked beeinflussen?
Hallo ich dachte das geht nur mit document.write ??? Wie soll ich denn sonst checked auf on stellen?
Ich muß doch aber irgendwie die checkbox Felder auf cheeck setzen und das tue ich doch mit document.write. Über den Namen spreche ich die checkbox an und deswegen muß ich das durch eine Schleife sausen lassen.
Ich habe mich an den Beispielen aus teamone gehalten und danach umgesetzt was ja auch fast läuft nur die for Scheife geht nicht !?
Hast Du mal den Code ausprobiert?
Kruß Katrin
Hallo,
Hallo ich dachte das geht nur mit document.write ??? Wie soll ich denn sonst checked auf on stellen?
In dem Du innerhalb Deiner Schleife schaust ob das momentane Feld gecheckt ist oder nicht, falls nicht wird es gekreuzelt. Nochmal: http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked
Ich muß doch aber irgendwie die checkbox Felder auf cheeck setzen und das tue ich doch mit document.write.
Nein, das musst DU AFAIK nicht und ist auch m.E. der falsche Ansatz, wie bereits geschrieben.
Über den Namen spreche ich die checkbox an und deswegen muß ich das durch eine Schleife sausen lassen.
Wie geschrieben: m.E. passt soweit alles nur _wie_ Du die Checkboxes ändern möchtest (nämlich mit document.write) ist IMHO nicht der beste Weg!
Ich habe mich an den Beispielen aus teamone gehalten und danach umgesetzt was ja auch fast läuft nur die for Scheife geht nicht !?
Das heisst? Zählt die Schleife nicht hoch? Wenn ja, hast Du Dir schon das Ergebnis von document.dein_formular.elements.length (z.B. per alert) ausgeben lassen, etc..
Hast Du mal den Code ausprobiert?
Nee, ich ging eigentlich davon aus das es bei Dir bisher soweit funktionierte... ;-)
Ich würde Dir gerne weiterhelfen, aber ich finde es auch nicht gut wenn man zur Hilfe den fertigen Code schickt und schon garnicht wenn ich nicht ausschliessen kann das möglicherweise von mir selbst auch ein Denkfehler in der Lösung ist.
Weiterhin viel Geduld & Grüsse ;-)
AndreD
Hi,
ich habe es nun etwas anders gelöst ich habe einfach checked auf true gesetzt dann ging es!
Ich gehe mal davon aus weil ich value in document.write('<input type="checkbox" name="nummer" value="... gesetzt habe das value den value von checked zerschossen hat.
Wenn ich nur mit name="nummer" gearbeitet habe ging alles wunderbar, deswegen habe ich es auch nicht verstanden warum das hier nicht ging...
nun habe ich mir die beispiele 10 mal durchgelesen bis ich es so hinbekommen habe wie ich es wollte... ;-)
danke!
Hallo,
ich habe es nun etwas anders gelöst ich habe einfach checked auf true gesetzt dann ging es!
Ja genau, das ist auch IMHO der einzige richtige Ansatz!
nun habe ich mir die beispiele 10 mal durchgelesen bis ich es so
hinbekommen habe wie ich es wollte... ;-)
Finde ich echt super das Du Dir die Zeit genommen hast das ganze selbst zu lösen!
danke!
Hat mich gefreut das ich Dich ein wenig auf eine Lösung "schubsen" konnte ;-)
Grüsse AndreD
Hallo!
mir blieb ja nichts über ich mußte es ja irgendwie hinbekommen auch wenn ich erst den falschen Weg gegangen bin der wiederum auch nur halb falsch war... ;-)
Einfach aufgeben das kann es auch nicht sein schliesslich wäre das erst recht Zeitverschwändung gewesen, nun habe ich wenigsten ein bischen dazu gelernt und ich hoffe beim nächsten Javascript programmieren einfacher an die Sache ran gehen zu können.
Zeit habe ich nicht wirklich, aber wer hat das schon? Nur durch Übung lernt man es und irgendwann wird es auch einfacher vom Finger rutschen...
Gruß Katrin