Christian: Checkboxen mit variablen Namen die zweite

'n Abend allerseits!

Da ich privat einige Probleme hatte, konnte ich mich nicht mit dem Scripting beschäftigen und auch nicht in meinem Thread antworten, bevor er ins Archiv verschwand. Link zum Original oben.
Er wurd auch sehr unübersichtlich weil ich Diskussionen über Java(script) und Parservorgänge ausgelöst habe.
Zu meinem Problem hatte mir am Ende Ashura noch geantwortet:

------------------------

Hallo Christian.

Mit einem Klick auf eine Checkbox soll eine feste Gruppe von anderen Checkboxen, deren Namen variabel sind, das checked-attribut bekommen oder verlieren.

So, nun aber zu deinem Problem. ;)

Vielleicht hilft dir GetElementsByTagName oder GetElementByID weiter..?

Mir wäre wohl geholfen, wenn ich wüsste, wie Funktionen etwas an eine andere Stelle in den Quelltext "schreiben" können...

Mich würde interessieren, ob die anderen Checkboxen im aktiven Dokument aktiviert werden sollen (ohne Neuladen des Dokuments) oder ob die anderen Checkboxen erst nach einer Auswertung durch dein PHP-Skript aktiviert werden sollen.

Gruß, Ashura

------------------------

Also, nochmals meine Problemstellung deutlicher:
1.) In meiner PHP-Seite sind $n Checkboxen mit dem variablen Namen $id[$n].
2.) Per Klick auf eine weitere Checkbox "alle/keine" soll die Gruppe der Checkboxen aus 1.) das "checked"-Attribut dynamisch (-> ohne Reload oder Auswertung des Formulars) erhalten bzw. verlieren.

GetElementByID hilft mir nicht, weil ich den variablen Namen der Checkboxen nicht in eine JS-Funktion zu schreiben in der Lage bin.

GetElementsByTagName hilft mir nicht, weil die Anzahl der Checkboxen ja ebenfalls in einer PHP-Variablen sind, ich sie also nicht per document.getElementsByTagName("input")[???] adressieren kann.

Na ja, ich könnte auch stumpf per Schleife alle input-tags von document.getElementsByTagName("input")[0] bis document.getElementsByTagName("input")[999] ändern lassen, aber mir wäre es lieber, wenn ich das ein bisschen professioneller machen könnte. ;)

Gruß
Christian

  1. Also, nochmals meine Problemstellung deutlicher:
    1.) In meiner PHP-Seite sind $n Checkboxen mit dem variablen Namen $id[$n].

    Wenn der Name wirklich auch die Indexnummer enthält, macht es die Sache kompliziert. Ohne die Nummer könntest du die Anzahl direkt per JS abfragen.

    2.) Per Klick auf eine weitere Checkbox "alle/keine" soll die Gruppe der Checkboxen aus 1.) das "checked"-Attribut dynamisch (-> ohne Reload oder Auswertung des Formulars) erhalten bzw. verlieren.

    Wieso sollen sie das Attribut verlieren?
    du kannst das Attribut auf true oder false setzen

    Struppi.

    1. Hallo Struppi,

      Wenn der Name wirklich auch die Indexnummer enthält, macht es die Sache kompliziert. Ohne die Nummer könntest du die Anzahl direkt per JS abfragen.

      Deswegen frage ich ja. Sonst wärs ja kein Problem!

      Wieso sollen sie das Attribut verlieren?
      du kannst das Attribut auf true oder false setzen

      ja, weiß ich. Meine Formulierung war nicht auf JS bezogen, sondern auf HTML. Hast recht.

      Aber mir helfen kannst du auch nicht? :/

      Gruß
      Christian

      1. Aber mir helfen kannst du auch nicht? :/

        Naja, du kannst es eigentlich nur so machen wie du es beschrieben hast oder etwas selektiver

        var i = 0;
        var form = document.forms[0];
        var status = treu;
        while (el = form.elements['id[' + i++ + ']') )
        {
        el.checked = status;
        }

        Dazu müssen die id  nummern aber vollständig sein und dürfen keine Lücken haben.

        Struppi.

        1. Hallo,

          Dazu müssen die id  nummern aber vollständig sein und dürfen keine Lücken haben.

          Hm, na ja, Lücken sind aber auch nicht zu verhindern.

          Gibt es keinen Weg, eine PHP-Variable ins JS zu übernehmen?

          Grüße
          Christian

          1. » Gibt es keinen Weg, eine PHP-Variable ins JS zu übernehmen?

            Klar, aber was hilft es dir, wenn du x-Checkboxen hast und nicht weißt wie diese durch nummeriert sind hilft dir das aber nicht weiter.

            Struppi.

            1. Klar, aber was hilft es dir, wenn du x-Checkboxen hast und nicht weißt wie diese durch nummeriert sind hilft dir das aber nicht weiter.

              Wieso hilft mir das nicht weiter? Ich habe doch ein PHP-Array, wo alle Namen drin stehen!

          2. Hallo, Christian!

            Hallo,

            Dazu müssen die id  nummern aber vollständig sein und dürfen keine Lücken haben.

            Hm, na ja, Lücken sind aber auch nicht zu verhindern.

            Gibt es keinen Weg, eine PHP-Variable ins JS zu übernehmen?

            natürlich. du kannst auch javascript-code per php dynamisch zusammensetzen.
            vielleicht zeigst du uns ja mal das php-script, das den checkboxcode generiert? wenn das gruppen sind, könntest du z.b. start- und endnummer jeder gruppe auch per "echo" an passender stelle im javascript-code ausgeben und es clientseitig dann weiterverarbeiten.

            freundl. Grüsse aus Berlin, Raik

            1. Hallo Raik!

              vielleicht zeigst du uns ja mal das php-script, das den checkboxcode generiert? wenn das gruppen sind, könntest du z.b. start- und endnummer jeder gruppe auch per "echo" an passender stelle im javascript-code ausgeben und es clientseitig dann weiterverarbeiten.

              Im PHP-Code sind mehrere Schleifen, die unter anderem die zu steuernden Checkboxen enthalten:

              while($row = mysql_fetch_object($mysql_result)) {
                  echo "<input type=checkbox name='".$row->id."check' value=1>";
                  $ids[] = $row->id;
              }

              1. Im PHP-Code sind mehrere Schleifen, die unter anderem die zu steuernden Checkboxen enthalten:

                while($row = mysql_fetch_object($mysql_result)) {
                    echo "<input type=checkbox name='".$row->id."check' value=1>";
                    $ids[] = $row->id;
                }

                Ach so, ich bin davon ausgegangen, dass die Checkboxen Namen in der form 'check[index]' haben.

                Da dies nicht der Fall ist würde ich genau den Weg wählen, den du im Ausgangsposting beschrieben hast. alle inputs holen prüfen ob es checkboxen sind und testen ob der String 'check' im Namen vorkommt. Das ist weniger Stumpf, als ein JS Array mit allen Namen zusammenzubasteln.

                Struppi.

                1. hallo struppi,

                  alle inputs holen prüfen ob es checkboxen sind und testen ob der String 'check' im Namen vorkommt. Das ist weniger Stumpf, als ein JS Array mit allen Namen zusammenzubasteln.

                  Hast du mal einen Link, wo die Übersetzung von PHP-Variablen in JS-Variablen erklärt wird?
                  Ich würd wenigstens gerne mal wissen, wie hoch der Aufwand ist.
                  Dann bräuchte ich nicht 500 Inputs oder so ersetzen, wenn es nur 2 gibt, weil ich die Anzahl der Checkboxen ja auch in einer PHP-Variable habe.

                  Gruß
                  Christian

                  1. Hast du mal einen Link, wo die Übersetzung von PHP-Variablen in JS-Variablen erklärt wird?

                    Allein diese Frage impliziert bei mir, dass dein Konzept falsch sein muss.
                    Leider sind deine Beschreibungen nur bedingt hilfreich und ich habe immer noch keine Plan wo genau das Problem ist. Du sprichst von einem JS Problem ich sehe aber überwiegend nur PHP Code, was für JS absolut unrelevant ist.

                    Ich würd wenigstens gerne mal wissen, wie hoch der Aufwand ist.
                    Dann bräuchte ich nicht 500 Inputs oder so ersetzen, wenn es nur 2 gibt, weil ich die Anzahl der Checkboxen ja auch in einer PHP-Variable habe.

                    Soweit ich die Informationen zusammenfassen kann, sieht die ganze Sache so aus.
                    (Ich rede jetzt nur von dem was im Browser ankommt, die PHP Seite interessiert gar nicht)

                    Du hast Checkboxen, die in etwa so benant sind:

                    <input type=checkbox name='ID_1check'>
                    <input type=checkbox name='ID_2check'>
                    <input type=checkbox name='ID_3check'>

                    Du möchtest genau diese mit einer Funktion alle checken oder unchecken:

                    (Hier gibt es jetzt ein Problem, das sich aber trotz nachfragen nicht gelöst hat, deine PHP Ausgabe $id bzw. $row->id was steht da drin? falls dies völlig willkürlich ist, d.h. nicht durchnummeriert, dann musst du die folgende Variante nehmen. Ist dagegen $row->id forlaufend nummeriert oder irgendwie anders Systematisch, wäre die ganze Sache einfacher zu lösen)

                    Die Funktion könnte dann so aussehen:

                      
                    function checkbox(status, which)  
                    {  
                        if(!document.getElementsByTagName) return;  
                        var input = document.getElementsByTagName('input');  
                        for(var i = 0; i < input.length; i++)  
                        {  
                             if( input[i].type != 'checkbox'  
                                 || !input[i].name  
                                 || input[i].name.indexOf(which) == -1  
                             ) continue;  
                      
                             input[i].checked = status  
                        }  
                    }  
                    
                    

                    aufgerufen z.b. mit einer anderen Checkbox:
                    <input type="checkbox" onclick="checkbox(this.checked, 'check');"> alle

                    Ob 500 oder tausend ist egal. Eine Seite mit sovielen Formularelementen ist sowieso träge - Ich hab's mit ca. 800 Input elementen getestet und das Skript läuft einwandfrei ohne Verzögerung.

                    Struppi.

                    1. Hallo, Struppi.

                      Allein diese Frage impliziert bei mir, dass dein Konzept falsch sein muss.

                      Och man. Ich würd halt einfach zu gern wissen, wie die Übersetzung geht.

                      Leider sind deine Beschreibungen nur bedingt hilfreich und ich habe immer noch keine Plan wo genau das Problem ist.

                      Gibts doch gar nicht...
                      $id bzw. $row->id was steht da drin? falls dies völlig willkürlich ist, d.h. nicht durchnummeriert, dann musst du die folgende Variante nehmen. Ist dagegen $row->id forlaufend nummeriert oder irgendwie anders Systematisch, wäre die ganze Sache einfacher zu lösen)

                      In der $row->id stehen Identifikationsnummern, fortlaufend, aber möglicherweise mit Lücken.

                      Die Funktion könnte dann so aussehen:

                      Danke, das werde ich nachher mal probieren!

                      Grüße
                      Christian