jochensan: alle checkboxen setzen

Sehr geehrte Damen und Herren,

folgendes Problem habe ich mit folgendem Code:

//diese Checkboxen werden in einer While-Schleife erzeugt//

<input type='checkbox' name='veranstaltungscheckbox[$i]' id='{veranstaltungscheckbox$veranstaltungsid}' value='$veranstaltungsid'>

//diese Checkbox außerhalb der While-Schleife soll alle gleichen Namens setzen/abwählen. //

<input value=' alles ' onclick='this.value=check(this.form.veranstaltungscheckbox)' type='checkbox'>

//dieses Script im Head sorgt dafür, dass das auch klappen könnte //

<script type="text/javascript" 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 " keine ";
          } else {
              for (i = 0; i < field.length; i++) {
                field[i].checked = false;
              }
              checkflag = "false";
              return " alle ";
            }
          }
        //  End -->
      </script>

Es werden also alle Checkboxen gleichen namens gesetzt bzw. abgewählt, solange der name der Checkbox ein reiner Name ist (z.B. veranstaltungscheckbox) erzeugt der Name allerdings ein Array (veranstaltungscheckbox[$i]), damit ich die boxen dann mit foreach auswerten kann, wird der Name nicht mehr erkannt. Lass ich "[$i]" weg, wirds kein Array mehr. Was kann ich tun, damit beides funzt?

Bedanke mich im vorraus für jedwede hilfsbereitschaft in dieser Sache.

Mit freundlichem Gruß

JochenSan

  1. So ganz habe ich dein Problem nicht verstanden (wie so oft *sigh*) aber...

    Es werden also alle Checkboxen gleichen namens gesetzt bzw. abgewählt, solange der name der Checkbox ein reiner Name ist (z.B. veranstaltungscheckbox) erzeugt der Name allerdings ein Array (veranstaltungscheckbox[$i]), damit ich die boxen dann mit foreach auswerten kann, wird der Name nicht mehr erkannt. Lass ich "[$i]" weg, wirds kein Array mehr.

    Ich denke du kannst das [$i] weglassen und dann über das Names-Array hinweg literieren. Etwa so

    var checkboxen = document.getElementsByName("veranstaltungscheckbox");  
    for (var j = 0 in checkboxen) {  
     checkboxen[j].checked = false;  
    }
    

    Oder so ähnlich... Kern ist halt die erste Zeile, da hast du dein Array über eine Reihe gleich benamter Formularelemente.

    --
    sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
    1. Hi und Danke!

      das Problem ist, wenn ich das [$i] weglasse, bekomm ich anschließend im $_POST nur die zuletzt gesetzte Checkbox also "Array ( [gruppencheckbox] => 41" Ich brauche aber alle. Also "Array ( [gruppencheckbox] => Array ( [1] => 39 [2] => 40 [3] => 41 ). Jetzt kann alle auswerten. Deshalb kann ich das [$i] nicht weglassen. Mit dem [$i] erkennt aber das Javascript den Namen nicht mehr. Ich bräuchte also so eine Art Platzhalter für javascript. So in der art :

      <input value=' alles ' onclick='this.value=check(this.form.gruppencheckbox*)' type='checkbox'>

      der Stern sollte bewirken, das jetzt alle gesetzt werden deren name mit "gruppencheckbox" beginnt.

      So geht das aber nicht. --> Problem noch nicht gelöst. (oder ich habe Dich falsch verstanden.

      Lg

      1. oder ich habe Dich falsch verstanden.

        Nein hast du nicht, mir war nicht bewusst, dass du serverseitig die Boxen auswertest.
        Ich arbeite idR nicht mit den Methoden, die du benutzt, deshalb muss ich gerade ein bisschen nachschlagen :) Moment...
        Ah okay, folgender Vorschlag:
        Übergib die Form nicht das Element also statt this.form.veranstaltungscheckbox nur this.form
        darin durchläufst du alle Elemente
        field.elements[j]
        und prüfst ob es sich um eine Checkbox handelt und falls das für dich relevant ist ob der Name mit veranstaltungscheckbox beginnt. Falls ja setzt du dein checked-Attribut.

        --
        sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
        1. Es gibt die Gruppencheckboxen, aber innerhalb der Gruppen dann für jede Gruppe die Teilnehmercheckboxen und die Veranstaltungscheckboxen. So dass es eine ganze Reihe verschiedenartiger Checkboxen gibt. Ich müsste deshalb schon mit übergeben, welche davon ich setzen möchte. Deshalb wollte ich den Namen der Boxen übergeben.

          <input type='checkbox' name='teilnehmercheckbox$i[$z]' id='{teilnehmercheckbox$teilnehmerid}' value='$teilnehmerid'>

          --> das wären jetzt die teilnehmerboxen der Gruppe $i

          <input value=' alles ' onclick='this.value=check(this.form.teilnehmercheckbox$i)' type='checkbox'>

          das soll jetzt alle teilnehmerboxen der gruppe $i setzen. Geht aber nicht, weil am Namen noch [$z] steht.

          Gar nicht so einfach, das Problem einzugrenzen bzw. zu beschreiben. das [$z] müsste irgendwie ignoriert werden können beim Übergeben und setzten.

          Danke für die Mühe auf jeden Fall.

          1. Don Ps Vorschlag ist viel besser als meiner und ich wundere mich, dass ich nicht drauf gekommen bin.
            Nimm den.

            --
            sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
  2. Hallo,

    Hallo,

    das Problem ist, wenn ich das [$i] weglasse, bekomm ich anschließend im $_POST nur die zuletzt gesetzte Checkbox also "Array ( [gruppencheckbox] => 41" Ich brauche aber alle.

    Meines Wissens reicht es, wenn der Name hinten mit "[]" endet, damit PHP dann alle gleichen Namens in ein Array packt. Also:

    <input type='checkbox' name='veranstaltungscheckbox[]' ...>

    Dein Script ist übrigens verbesserungswürdig: Das language-Attribut ist unnötig, die Zeilen mit //Begin und //End sind unnötig, ein boolescher Wert muss nicht als Zeichenkette angelegt werden, also nicht

    var checkflag = "false";

    if (checkflag == "false") {...
    checkflag = "true";
    checkflag = "false";

    sondern:  
      
    ~~~javascript
     var checkflag = false;  
     if (checkflag) {...  
     checkflag = true;  
     checkflag = false;  
    
    

    Gruß, Don P

    --
    sh:( fo:) ch:? rl:( br:] n4:~ ie:% mo:? va:{ js:) de:/ zu:] fl:( ss:| ls:&
    1. Hi und Danke!

      Du hast recht, ...[] reicht aus. Allerdings löst diese Änderung das Problem noch nicht.

      Lg

      1. Hallo,

        Du hast recht, ...[] reicht aus. Allerdings löst diese Änderung das Problem noch nicht.

        Allerdings beschreibt diese Auskunft das eigentliche Problem nicht.

        Tatsache ist: Wenn du mehrere zusammenghörige Checkboxwerte als Array an PHP übergeben willst, dann müssen sie den gleichen Namen haben mit "[]" am Ende.

        Sollten es mehrere Gruppen (fildsets?) oder sowas sein, dann gib z.B. den Checkboxen jeder Gruppe so einen Namen, und der Auswahl-/Abwahlfunktion kann man so gestalten, dass alle gleichen Namens in einer Gruppe abgeklappert werden.

        Gruß, Don P

  3. Hi,

    //diese Checkboxen werden in einer While-Schleife erzeugt//

    <input type='checkbox' name='veranstaltungscheckbox[$i]' id='{veranstaltungscheckbox$veranstaltungsid}' value='$veranstaltungsid'>

    //diese Checkbox außerhalb der While-Schleife soll alle gleichen Namens setzen/abwählen. //

    <input value=' alles ' onclick='this.value=check(this.form.veranstaltungscheckbox)' type='checkbox'>

    Diesen Namen hat aber offenbar keine deiner Checkboxen.

    Es werden also alle Checkboxen gleichen namens gesetzt bzw. abgewählt, solange der name der Checkbox ein reiner Name ist (z.B. veranstaltungscheckbox) erzeugt der Name allerdings ein Array (veranstaltungscheckbox[$i]), damit ich die boxen dann mit foreach auswerten kann, wird der Name nicht mehr erkannt.

    „Wird der Name nicht mehr erkannt“ ist Unfug.

    Eine Checkbox hat den Namen, den du ihr gibst.
    Wenn du ihr den Namen "veranstaltungscheckbox[4711]" gibst, dann ist genau das ihr Name.

    Lass ich "[$i]" weg, wirds kein Array mehr. Was kann ich tun, damit beides funzt?

    Wenn du wie Don vorschlug, den Index in den Klammern weglassen kannst - dann brauchst du nur noch nachlesen, auf welche Arten man Formularelemente ansprechen kann: http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines

    Btw., die Frage wurde hier schon zigfach gestellt und diskutiert. Beim nächsten Mal also bitte erst mal suchen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hi Chris B.

      Deine - ich unterstelle mal - gutgemeinten Ratschläge helfen mir nicht weiter.

      Schön wär gewesen, wenn Du mir mit all Deinem Fachwissen und deinem kreuz und quer durchs ganze Forum lesen einfach mal geschrieben hättest, wie ich  nun
      alle veranstaltungscheckboxen an das Javascript übergeben kann

      this.form.veranstaltungscheckbox --> geht nicht
      this.form.veranstaltungscheckbox[] --> geht nicht
      this.form.veranstaltungscheckbox[1] --> nichtmal das geht
      this.form.veranstaltungscheckbox["1"] --> geht nicht

      Es ist mühselig zuerst alle ähnlichen Fälle studieren zu müssen um ausschließen zu können, dass genau die gleiche Frage nicht schonmal gestellt wurde.

      Das ist hier schließlich keine Enzyklopädie, sondern ein Forum, welches von der Unterhaltung lebt. Da kann es durchaus passieren, daß es eine Frage schonmal gab. Ein kleiner Verweis auf eine der zigfach vorhandenen, vorangegangenen Lösungen meines Problems wäre ebenfalls hilfreich gewesen.

      Das, was Du mir hier anbietest verschwendet einfach nur Deine und meine Zeit!

      Mfg

      1. this.form.veranstaltungscheckbox --> geht nicht
        this.form.veranstaltungscheckbox[] --> geht nicht
        this.form.veranstaltungscheckbox[1] --> nichtmal das geht
        this.form.veranstaltungscheckbox["1"] --> geht nicht

        Es ist mühselig zuerst alle ähnlichen Fälle studieren zu müssen um ausschließen zu können, dass genau die gleiche Frage nicht schonmal gestellt wurde.

        Es ist aber auch mühselig aus deinen Postings rauszulesen, wie die checkboxen heißen, da du uns nur den PHP Code zeigst und auch anscheinend gar nicht den wirklichen HTML Code deiner Seite kennst.

        Der Name der Checkboxen ist:
        name='veranstaltungscheckbox[$i]'
        Wobei du den Inhalt der Variabel $i uns nicht gesagt hast.

        Besser wäre es, wenn du den index den du für dein PHP Skript brauchst nicht in den Namen einbauen würdest - also das $i weglassen (nicht die eckigen Klammern) Dann wäre das Skript ganz einfach, so wie ich es einmal auf meiner Seite bschrieben habe: http://javascript.jstruebig.de/javascript/29/

        Wenn du unbedingt den Index beibehalten willst, musst du in einer Schleife alle Kombinationsmöglichkeiten des Namens zusammenbauen.

        Struppi.

        1. Super Hilfe! Toll, Deine Seite! Vielen Dank! --> Problem gelöst

      2. Mahlzeit jochensan,

        zu Deiner "Problembeschreibung" möchte ich als Erstes auf folgendes Zitat hinweisen:

        Zitat 1353

        Bitte berücksichtige das zukünftig!

        this.form.veranstaltungscheckbox --> geht nicht
        this.form.veranstaltungscheckbox[] --> geht nicht
        this.form.veranstaltungscheckbox[1] --> nichtmal das geht
        this.form.veranstaltungscheckbox["1"] --> geht nicht

        Was auch alles jeweils zu erwarten war/ist. Kaum macht man's richtig (in diesem Fall - wie so oft - einfach nach <http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines@title=Schema 4>), funktioniert's auch.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      3. Hi,

        Deine - ich unterstelle mal - gutgemeinten Ratschläge helfen mir nicht weiter.

        Dann unterstelle ich mal, dass du dir nicht mal ansatzweise Mühe gegeben hast, die verlinkte Quelle zu Lesen und zu verstehen.

        Schön wär gewesen, wenn Du mir mit all Deinem Fachwissen und deinem kreuz und quer durchs ganze Forum lesen einfach mal geschrieben hättest, wie ich  nun
        alle veranstaltungscheckboxen an das Javascript übergeben kann

        Schön wäre, wenn du hier nicht derart fordernd auftreten würdest, sondern dir nach dem Hinweis auf eine Quelle, wo du dich informieren kannst, neues Wissen selber erarbeiten würdest.

        Es ist mühselig zuerst alle ähnlichen Fälle studieren zu müssen um ausschließen zu können, dass genau die gleiche Frage nicht schonmal gestellt wurde.

        Und trotzdem ist es deine Aufgabe, dich vorher in zumutbarem Maße zu informieren.

        Das, was Du mir hier anbietest verschwendet einfach nur Deine und meine Zeit!

        Ja, Leuten die zu faul sind, sich selber zu informieren, kann ich nicht weiterhelfen.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Es muss schlimm für Dich sein, nur von faulen Menschen umgeben zu sein!

          Das Problem ist nun gelöst. Muss ich das irgendwie kenntlich machen? Falls, wie?