label checkbox
Daniel
- html
Ahoi alle,
ich habe eine tabelle.
in der ersten spalte sind chackboxen.
kann ich ein label um die letzte checkbox machen und somit alle anderen
selektieren? oder geht dieses ALLE nur per JS? oder würde dies dann das
checked bei allen ändern?
Wenn es geht, wie muss ich das machen?
MfG
hi,
kann ich ein label um die letzte checkbox machen und somit alle anderen
selektieren?
nein.
erstens wirkt label "andersherum" - wird das label angeklickt, wird das formularelement auf das es sich bezieht, fokussiert oder sein status geändert.
und zum zweiten kannst du label nur auf ein element beziehen, welches nicht innerhalb von ihm liegt, wenn du die ID dieses elements angibst. das for-attribut ist vom typ IDREF, und enthält damit nur genau eine ID.
oder geht dieses ALLE nur per JS?
(clientseitig) ja.
oder würde dies dann das checked bei allen ändern?
wie meinen?
Wenn es geht, wie muss ich das machen?
schleife über alle (in frage kommenden) checkboxen, und deren checked-eigenschaft manipulieren.
gruß,
wahsaga
Ahoi wahsaga,
nein.
erstens wirkt label "andersherum" - wird das label angeklickt, wird das formularelement auf das es sich bezieht, fokussiert oder sein status geändert.
aber wenn cih eine checkbox in das label setzte denn wird doch wenn
ich die checkbox anklicke auch das label geklickt, oder nicht?
und zum zweiten kannst du label nur auf ein element beziehen, welches nicht innerhalb von ihm liegt, wenn du die ID dieses elements angibst. das for-attribut
aha, das ja doof, hab ne testseite gebastelt, allen boxen die gleiche
id verpasst, wird aber nur eins gewählt :( das ja doof.
oder geht dieses ALLE nur per JS?
(clientseitig) ja.
wie soll mans denn sonst machen? nen alle submit button und dann per
php usw. bearbeiten und das ganze nochmal schicken?
oder würde dies dann das checked bei allen ändern?
wie meinen?
checkbox 1 = checked
checkbox 2 = checked
checkbox 3 = not checked
alle geklickt => entweder:
checkbox 1 = checked
checkbox 2 = checked
checkbox 3 = checked
oder
checkbox 1 = not checked
checkbox 2 = not checked
checkbox 3 = checked
jetzt die frage klar?
Wenn es geht, wie muss ich das machen?
schleife über alle (in frage kommenden) checkboxen, und deren checked-eigenschaft manipulieren.
aha, JS ist aber assi. gibts da denn keine vernüftige clientseitige
lösung? oder nur ein alle submit button um evt. user mit
abgeschaltetem JS diese option zu ermöglichen? ja ich weis php ist
Serverseitig.
MfG
hi,
aber wenn cih eine checkbox in das label setzte denn wird doch wenn
ich die checkbox anklicke auch das label geklickt, oder nicht?
nein, wie ich schon sagte, es "wirkt andersherum": du klickst auf den inhalt von label (beschreibender text), und das enthaltene formularelement ist betroffen.
umgekehrt ergäbe es wenig sinn. wozu den klick auf das label annehmen, wenn die darin liegende checkbox angeklickt wurde - um dann jetzt deren zustand wieder zu ändern, weil das schließlich labels aufgabe ist?
damit wäre die checkbox ja unnutzbar geworden.
aha, das ja doof, hab ne testseite gebastelt, allen boxen die gleiche id verpasst
du solltest doch inzwischen wissen, dass eine ID dokumentweit verflixt noch mal eindeutig zu sein hat.
gruß,
wahsaga
Hallo Daniel,
kann ich ein label um die letzte checkbox machen und somit alle anderen
selektieren? oder geht dieses ALLE nur per JS? oder würde dies dann das
checked bei allen ändern?
Du sagst es - das geht nur mit JS.
Wenn es geht, wie muss ich das machen?
So: http://de.selfhtml.org/javascript/objekte/elements.htm#checked
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Ahoi Marc Reichelt,
So: http://de.selfhtml.org/javascript/objekte/elements.htm#checked
also viel geholfen hats mir nix, hab jetzt das hier und es funktioniert nicht:
JS:
function checking () {
if (document.form.alle.checked == true)
{
alert("alle");
}
else
{
alert("nicht alle");
}
}
html:
<input type="checkbox" name="alle" value="alle" onClick="checking()">
ich bekomme garkeine meldung :(
die JS konsole vom FF bringt "checking is not definied"
MfG
hi,
die JS konsole vom FF bringt "checking is not definied"
und die funktionsdefinition ist wie eingebunden?
gruß,
wahsaga
Ahoi wahsaga,
und die funktionsdefinition ist wie eingebunden?
was willst du wissen?
http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=funktionsdefinition&feld=alle&index_1=on&index_2=on&index_3=on&index_4=on&hits=100
MfG
hi,
und die funktionsdefinition ist wie eingebunden?
was willst du wissen?
wo sich die stelle befindet, wo du
function checking() { ... }
stehen hattest - um herauszufinden, warum der FF die funktion nicht kennt.
gruß,
wahsaga
Ahoi wahsaga,
wo sich die stelle befindet, wo du
function checking() { ... }
stehen hattest - um herauszufinden, warum der FF die funktion nicht kennt.
im head, der fehler war wohl das ich in der funktion noch was hatte was
ihm nicht gepasst hat, nachdem ich das gelöscht hatte und wirklich nur
die allerts hats funktioniert, jetzt z.B. funktionierts wieder nicht
sonder ich bekomme:
Fehler: missing ) after argument list
Quelldatei: <zensiert>
Zeile: 11, Spalte: 37
Quelltext:
foreach(document.form.auswahl as $key => $value)
MfG
Hi,
Fehler: missing ) after argument list
Quelldatei: <zensiert>
Zeile: 11, Spalte: 37
Quelltext:
foreach(document.form.auswahl as $key => $value)
Javascript ist KEIN php.
cu,
Andreas
Ahoi MudGuard,
Javascript ist KEIN php.
sicher?
*SCNR*
MfG
Ahoi nochmal,
so, jetzt würd ich gern statt der alerts auch was vernüftiges machen,
wie kann ich die anderen checkboxen durchlaufen? name="auswahl[]" die
anzahl ist unbegrentzt. kennt JS foreach?
MfG
hi,
so, jetzt würd ich gern statt der alerts auch was vernüftiges machen,
wie kann ich die anderen checkboxen durchlaufen? name="auswahl[]" die
anzahl ist unbegrentzt. kennt JS foreach?
so etwas ähnliches, eine for-in-schleife.
aber ob du die benutzt, oder ein normales for, sollte m.E. ziemlich egal sein.
um an alle checkboxen mit name="auswahl[]" heranzukommen, bietet sich vermutlich am ehesten getElementsByName an.
gruß,
wahsaga
Ahoi wahsaga,
so etwas ähnliches, eine for-in-schleife.
versteh nicht wie mir das weiterhelfen sollte.
aber ob du die benutzt, oder ein normales for, sollte m.E. ziemlich egal sein.
da ich nicht weis wieviele elemente es sind finde ich schon das es mit
einem for nicht geht, brauch ja ansich nix hochzählen.
um an alle checkboxen mit name="auswahl[]" heranzukommen, bietet sich vermutlich am ehesten getElementsByName an.
nunja, ich hab die funktion jetzt so erweitert:
$z = 0;
while(document.getElementsByName("auswahl")[$z].checked = true)
{
$z++;
}
aber die JS konsole bringt mir:
Fehler: document.getElementsByName("auswahl")[$z] has no properties
Quelldatei: <zensiert>
Zeile: 12
Außerdem hab ich beim aufruf des Anzeigebeispiels der for in schleife diese meldung in die konsole bekommen:
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIDOM3Document.domConfig]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" location: "JS frame :: http://de.selfhtml.org/javascript/sprache/anzeige/objekteigenschaften.htm :: <TOP_LEVEL> :: line 9" data: no]
falls es jmd intressiert.
MfG
um an alle checkboxen mit name="auswahl[]" heranzukommen, bietet sich vermutlich am ehesten getElementsByName an.
nunja, ich hab die funktion jetzt so erweitert:
$z = 0;
while(document.getElementsByName("auswahl")[$z].checked = true)
{
$z++;
}
aber die JS konsole bringt mir:
Fehler: document.getElementsByName("auswahl")[$z] has no properties
Quelldatei: <zensiert>
Zeile: 12
Gute Programmierung, ist es immer zu prüfen ob das Objekt überhaupt existiert
Ist hier aber gar nicht nötig da du, wie ich weiter oben schon schrieb, die Anzahl ja ohne Probleme bekommst.
Struppi.
so, jetzt würd ich gern statt der alerts auch was vernüftiges machen,
wie kann ich die anderen checkboxen durchlaufen? name="auswahl[]" die
anzahl ist unbegrentzt. kennt JS foreach?
heißen die alle "auswahl[]"?
Dann:
for(var i = 0; i < document.FormName.elements['auswahl[]'].length; i++)
{
alert(document.FormName.elements['auswahl[]'][i].checked);
}
Struppi.
Ahoi Struppi,
heißen die alle "auswahl[]"?
die dann bei klick auf alle dann gechecked werden soll, bzw. unchecked ja.
for(var i = 0; i < document.FormName.elements['auswahl[]'].length; i++)
werd ich gleich mal ausprobieren, halt es aber nicht für die beste
lösung, naja ist halt böses JS aber was man für die DAUs & Co nicht
alles macht.
MfG
for(var i = 0; i < document.FormName.elements['auswahl[]'].length; i++)
werd ich gleich mal ausprobieren, halt es aber nicht für die beste
lösung, naja ist halt böses JS aber was man für die DAUs & Co nicht
alles macht.
Ausprobiert ist das schon http://javascript.jstruebig.de/exp/faq/checkall.html
Wieso soll das nicht beste Lösung sein?
das ist abwärts kompatibel bis zu Browsersteinzeit und solange du name mit dem von dir benutzen DOCTYPE verwenden kannst wird es bestimmt auch nicht abgeschafft. Was kann es für eine bessere Lösung geben?
Struppi.
Ahoi nochmal,
Also ich hab ein html dokument das so aufgebaut ist:
<input type="checkbox" name="auswahl[]" value="3" onClick="nichtalle(3)">
<input type="checkbox" name="auswahl[]" value="7" onClick="nichtalle(7)">
<input type="checkbox" name="auswahl[]" value="9" onClick="nichtalle(9)">
<input type="checkbox" name="auswahl[]" value="15" onClick="nichtalle(15)">
<input type="checkbox" name="auswahl[]" value="16" onClick="nichtalle(16)">
...
<input type="checkbox" name="alle" value="set" onClick="checking()">
sowie diesen JS code:
function checking () {
if (document.form.alle_kontakt.checked == true)
{
$z = 0;
while(document.getElementsByName("auswahl[]")[$z].checked = true)
{
$z++;
}
}
}
function nichtalle($id) {
if (document.getElementsByName("auswahl[]").value == $id)
{
alert("$id");
}
}
die checking funktion funktioniert. die nichtalle nicht. ich will mit
der funktion nichtalle den hacken aus der alle checkbox nehmen aber
nur wen der aus der ID rausgemacht wurde. wenn nicht soll geprüft
werden ob in allen auswahl[] checkboxen checked=true ist und wenn ja
der alle angekreutzt werden.
MfG
Hallo Daniel,
die checking funktion funktioniert. die nichtalle nicht. ich will mit
der funktion nichtalle den hacken aus der alle checkbox nehmen aber
nur wen der aus der ID rausgemacht wurde. wenn nicht soll geprüft
werden ob in allen auswahl[] checkboxen checked=true ist und wenn ja
der alle angekreutzt werden.
Komischerweise mixt du PHP- mit JavaScript-Code.
Verwende stattdessen _ausschließlich_ JavaScript-Code.
Keine $-Zeichen!
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Also ich hab ein html dokument das so aufgebaut ist:
<input type="checkbox" name="auswahl[]" value="3" onClick="nichtalle(3)">
<input type="checkbox" name="auswahl[]" value="7" onClick="nichtalle(7)">
<input type="checkbox" name="auswahl[]" value="9" onClick="nichtalle(9)">
<input type="checkbox" name="auswahl[]" value="15" onClick="nichtalle(15)">
<input type="checkbox" name="auswahl[]" value="16" onClick="nichtalle(16)">
...
<input type="checkbox" name="alle" value="set" onClick="checking()">
Wenn du das von Anfang an gezeigt hättest... na gut lassen wir das.
sowie diesen JS code:
function checking () {
if (document.form.alle_kontakt.checked == true)
{
$z = 0;
while(document.getElementsByName("auswahl[]")[$z].checked = true)
{
$z++;
}
}
}
Warum du einerseits über die forms Collection zugrfeist und anderseits nicht auf die elements ist mir ein Rätsel. Wie gesagt elements ist Abwärts kopatibel und wesentlich schneller als getElements...
Zumal diese Funktion nach wie vor einen Fehler erzeugen müßte bei $z == 5 elements['auswahl[]'][5] undefiniert ist und demzufolge kein Eigenschaft checked hat.
function nichtalle($id) {
if (document.getElementsByName("auswahl[]").value == $id)
{
alert("$id");
}
}
Was soll das bezwecken?
die checking funktion funktioniert.
glaub ich nicht.
die nichtalle nicht. ich will mit
der funktion nichtalle den hacken aus der alle checkbox nehmen aber
nur wen der aus der ID rausgemacht wurde. wenn nicht soll geprüft
werden ob in allen auswahl[] checkboxen checked=true ist und wenn ja
der alle angekreutzt werden.
Dein Satzbau macht es schwer zu verstehen was du willst.
ich würd das ganze flexibler gestalten, falls du das mal erweiterst.
<form>
<input type="checkbox" name="auswahl[]" value="3" onclick="checking(this)">
<input type="checkbox" name="auswahl[]" value="7" onclick="checking(this)">
<input type="checkbox" name="auswahl[]" value="9" onclick="checking(this)">
<input type="checkbox" name="auswahl[]" value="15" onclick="checking(this)">
<input type="checkbox" name="auswahl[]" value="16" onclick="checking(this)">
<input type="checkbox" name="alle" value="set" onclick="checking(this, 'auswahl[]')">
</form>
<script type="text/javascript">
function checking (el, name)
{
if(!el) return;
var alle = true;
if(!name)
{
name = el.name;
alle = el.checked && el.form.alle.checked;
}
var box = el.form[name];
alert('alle:' + alle + ':'+ name);
for(var i = 0; i < box.length; i++) if(alle) box[i].checked = true;
}
</script>
Struppi.
Ahoi Struppi,
Wenn du das von Anfang an gezeigt hättest... na gut lassen wir das.
hab ich nicht? naja jetzt aber.
Warum du einerseits über die forms Collection zugrfeist und anderseits nicht auf die elements ist mir ein Rätsel.
das liegt daran das ich JS nicht benutze, ansich nicht benutze, für
das aber aufgrund von benutzerfreundlichkeit nicht verzichten will.
Zumal diese Funktion nach wie vor einen Fehler erzeugen müßte bei $z == 5 elements['auswahl[]'][5] undefiniert ist und demzufolge kein Eigenschaft checked hat.
jain, schließlich ist die anzahl der checkboxen nicht in diesem
niedrigen breich, zweitens ist selbige variable.
Was soll das bezwecken?
ansich ne ausgabe. wie gesagt im groben und ganzen hab ich 0 ahnung
von JS ich hab zwar schon etwas JAVA und JavaApplet erfahrung aber das
wars.
die checking funktion funktioniert.
glaub ich nicht.
doch, und schmeißt mir in die JS-Konsole ne fehlermeldung, aber alle werden gechecked
Dein Satzbau macht es schwer zu verstehen was du willst.
ich kann halt kein deutsch, die fast 5 (also 4) kam nicht von ungefähr.
ich probiers mal so:
if alle-checkbox checked dann check alle auswahl
if alle-checkbox not checked dann egal (evt. fals möglich eine JS meldung mit abfrage alle auswahl dechecken? da dies gut an die 100-200 sein können)
if auswahl[] mit value abc = dechecked dann decheck alle-checkbox
if auswahl[] mit value abc = checked kuck ob alle auswahl gechecked sind und wenn ja dann check alle-checkbox
ich würd das ganze flexibler gestalten, falls du das mal erweiterst.
ansich wird da wenn überhaupt nurnoch der PHP code erweitert.
function checking (el, name)
{
}
da bleibt die alle-checkbox gechecked wenn ich bei einer auswahl den
hacken raus mache. mach ich dann bei der alle-checkbox den hacken raus
sind alle auswahl-checkboxen gechecked.
MfG
Ahoi nochma,
hatte den code erweitert und es war keine änderung zu sehen, dann hab ich hier gepostet.
anschließend hab ich mir das ganze mal im IE angekuckt und auf einmal "gings". also nochmal die seite im FF aufgemacht und es "ging" dort auf einmal auch, wohl nicht richtig aktuallisiert *schäm* das einzigste was jetzt noch fehlt ist das wenn jede der möglichen auswahl-checkboxen gewählt ist das dann auch die alle gewählt wird.
hab den code nach dem alert() so verändert:
if(!alle)
{
el.form.alle.checked = false;
}
else
{
for(var i = 0; i < box.length; i++)
{
if(alle)
{
box[i].checked = true;
}
}
}
MfG
Warum du einerseits über die forms Collection zugrfeist und anderseits nicht auf die elements ist mir ein Rätsel.
das liegt daran das ich JS nicht benutze, ansich nicht benutze, für
das aber aufgrund von benutzerfreundlichkeit nicht verzichten will.
Deshalb verwendest du die schlechtere und benutzerunfreundlichere Lösung?
Zumal diese Funktion nach wie vor einen Fehler erzeugen müßte bei $z == 5 elements['auswahl[]'][5] undefiniert ist und demzufolge kein Eigenschaft checked hat.
jain, schließlich ist die anzahl der checkboxen nicht in diesem
niedrigen breich, zweitens ist selbige variable.
Trotzallem existiert irgendwann die box auswahl[] nicht mehr und dann erzeugt das Skript einen Fehler.
die checking funktion funktioniert.
glaub ich nicht.doch, und schmeißt mir in die JS-Konsole ne fehlermeldung, aber alle werden gechecked
Das ist genau das was ich oben meine.
ich probiers mal so:
if alle-checkbox checked dann check alle auswahl
if alle-checkbox not checked dann egal (evt. fals möglich eine JS meldung mit abfrage alle auswahl dechecken? da dies gut an die 100-200 sein können)
Das macht das Skript
if auswahl[] mit value abc = dechecked dann decheck alle-checkbox
if auswahl[] mit value abc = checked kuck ob alle auswahl gechecked sind und wenn ja dann check alle-checkbox
nach mehrmaligen Lesen hab ich's verstanden.
<script type="text/javascript">
function checking (el, name)
{
if(!el) return;
if(!name)
{
var box = el.form[el.name];
var alle = true;
for(var i = 0; i < box.length; i++)
if(!box[i].checked)
{
el.form.alle.checked = false;
break;
}
}
else
{
var box = el.form[name];
for(var i = 0; i < box.length; i++) box[i].checked = el.form.alle.checked;
}
}
</script>
Struppi.
<script type="text/javascript">
function checking (el, name)
{
if(!el) return;
if(!name)
{
var box = el.form[el.name];
el.form.alle.checked = true;
for(var i = 0; i < box.length; i++)
if(!box[i].checked)
{
el.form.alle.checked = false;
break;
}
}
else
{
var box = el.form[name];
for(var i = 0; i < box.length; i++) box[i].checked = el.form.alle.checked;
}
}
</script>
Struppi.
Hallo Struppi.
<script type="text/javascript">
function checking (el, name)
{
if(!el) return;
if(!name)
{
var box = el.form[el.name];
el.form.alle.checked = true;
for(var i = 0; i < box.length; i++)
if(!box[i].checked)
{
el.form.alle.checked = false;
break;
}}
else
{
var box = el.form[name];
for(var i = 0; i < box.length; i++) box[i].checked = el.form.alle.checked;
}
}
>
> `</script>`{:.language-html}
Die Blöcke du nutzen solltest, die Lesbarkeit du damit steigerst.
Einen schönen Freitag noch.
Gruß, Ashura
--
Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
[30 Days to becoming an Opera8 Lover](http://operalover.tntluoma.com/8/) -- [Day 21: Toolbars](http://operalover.tntluoma.com/8/day_21_toolbars)
Meine Browser: [Opera 8.02](http://my.opera.com/noctus/affiliate/download/) | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
[\[Deshalb frei! - Argumente pro freie Software\]](http://deshalbfrei.org/)
Die Blöcke du nutzen solltest, die Lesbarkeit du damit steigerst.
Jaja, ich mach's ab und an, aber ich find's umständlich, ging auch vorher ohne.
Struppi.
Hallo Struppi.
Die Blöcke du nutzen solltest, die Lesbarkeit du damit steigerst.
Jaja, ich mach's ab und an, aber ich find's umständlich, ging auch vorher ohne.
Wenn jeder so denkt, setzen sich die neuen nützlichen Features der Forensoftware nie durch.
Einen schönen Freitag noch.
Gruß, Ashura
Ahoi Struppi,
alle = true;
wurde zu
el.form.alle.checked = true;
ich hab jetzt fast eine minute hin und her geswitched bios ich den punkt
fand den du korrigiert hast
@Ashura, was du meinen mit blöcke? [code...?
MfG
Hallo Daniel.
@Ashura, was du meinen mit blöcke? [code...?
Ja, das meinte ich.
Einen schönen Freitag noch.
Gruß, Ashura
Ahoi Struppi,
Deshalb verwendest du die schlechtere und benutzerunfreundlichere Lösung?
nein. aber deshalb mach ich das so verworen. benutz das ja nichtmehr
Trotzallem existiert irgendwann die box auswahl[] nicht mehr und dann erzeugt das Skript einen Fehler.
ja, im prinzip hast ja recht und ich machs ja schon nichtmehr so.
doch, und schmeißt mir in die JS-Konsole ne fehlermeldung, aber alle werden gechecked
Das ist genau das was ich oben meine.
ich weis, etwas ahnung hab ich schon.
ich probiers mal so:
if alle-checkbox checked dann check alle auswahl
if alle-checkbox not checked dann egal (evt. fals möglich eine JS meldung mit abfrage alle auswahl dechecken? da dies gut an die 100-200 sein können)Das macht das Skript
nein tut es jetzt nichtmehr, wenn ich jetzt die alle-checkbox dechecke
dann werden alle andern auch dechecked, kann man da zuvor keine
ja/nein abfrage machen mit JS? und if ja geklickt dann deselct wenn
nein dann nicht?
also bei mir siehts jetzt so aus und es funktioniert so wie ich will. außer das das mit der abfrage noch nicht kommt.
function checking (el, name)
{
if(!el) return;
var alle = true;
if(!name)
{
var box = el.form[el.name];
var alle = true;
for(var i = 0; i < box.length; i++)
{
if(!box[i].checked)
{
alle = false;
}
}
if(alle)
{
el.form.alle.checked = true;
}
else
{
el.form.alle.checked = false;
}
}
else
{
var box = el.form[name];
for(var i = 0; i < box.length; i++)
{
if(alle)
{
box[i].checked = true;
}
}
}
}
MfG