Roger: zufällig 5 checkboxes auswählen

moin!

ich habe eine beliebe anzahl checkboxen. alle heißen "frage[]".
von diesen möchte ich, dass per zufall 5 ausgewählt werden. wie mache ich das?
wenn alle checkboxen anders heißen würden, so könnte man die namen in ein array schreiben und dann mittels schleife zufällig 5 auswählen. aber die checkboxes heißen ja alle gleich :S

kann mir jemand einen tipp geben?

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. Hi!

    ich habe eine beliebe anzahl checkboxen. alle heißen "frage[]".
    von diesen möchte ich, dass per zufall 5 ausgewählt werden. wie mache ich das?
    wenn alle checkboxen anders heißen würden, so könnte man die namen in ein array schreiben und dann mittels schleife zufällig 5 auswählen. aber die checkboxes heißen ja alle gleich :S

    kann mir jemand einen tipp geben?

    ich glaube die heissen nicht alle gleich, sondern frage[0], frage[1], usw.

    Jetzt muss du nur noch zufällig 5 Zahlen im Bereich von 0 bis X generieren...

    MfG,
      Juan

    1. Moin!

      ich glaube die heissen nicht alle gleich, sondern frage[0], frage[1], usw.

      Nein, wenn alle das Attribut name="frage[]" haben, heißen sie in Javascript alle gleich - später bei der Auswertung in PHP würden sie dann durchnumeriert werden, wobei immer beim Index 0 angefangen wird - der Unterschied liegt dann im Value, den die jeweilige Checkbox übermittelt.

      Jetzt muss du nur noch zufällig 5 Zahlen im Bereich von 0 bis X generieren...

      Zufall hinzukriegen dürfte nicht das Problem sein. Der Zugriff auf die checked-Eigenschaft ist aber auch in Javascript kein Problem: Formularelemente, die unter dem gleichen Namen mehrfach auftreten, bilden in Javascript automatisch ein Array, das einen Index erlaubt, mit dem man die erste (0), zweite (1), dritte (2) usw. Checkbox ansprechen kann.

      Siehe dazu (und zum Geheimnis, wie man ein Formularfeld, welches "[]" im Namen hat, in Javascript ansprechen kann) am besten http://de.selfhtml.org/javascript/objekte/elements.htm, Erläuterung 4.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. moin!

        ok, danke sven, funktioniert bereits!
        das fertige script poste ich gleich. habe grad noch ein problem entdeckt:
        ich möchte ja zufällig 5 auswählen. wenn ich aber eine schleife 5mal durchlaufen lasse, dann kann es passieren, dass eben zufällig mehrmals die gleiche zahl aufgerufen wird, weil ja mit jedem random-aufruf der zufallsgenerator neu gestartet wird. wie kann ich das umgehen?

        gruß.
        roger.

        --
        meine freundin sagt, ich wäre neugierig.
        so steht's zumindest in ihrem tagebuch.
        1. Moin,

          ich möchte ja zufällig 5 auswählen. wenn ich aber eine schleife 5mal durchlaufen lasse, dann kann es passieren, dass eben zufällig mehrmals die gleiche zahl aufgerufen wird, weil ja mit jedem random-aufruf der zufallsgenerator neu gestartet wird. wie kann ich das umgehen?

          wie wäre es denn, wenn du dir in ner Variable (z.B. nem Array) merkst, welche du schon gezogen hast und die Schleife so oft durchläufst bist du 5 verschiedene Zahlen hast?

          So kannst du die grad gezogene Zahl mit denen im Array vergleichen und ggf. einen weitere Schleifendurchlauf machen.

          MfG,
            Juan

          1. Hello out there!

            wenn ich aber eine schleife 5mal durchlaufen lasse, dann kann es passieren, dass eben zufällig mehrmals die gleiche zahl aufgerufen wird,

            wie wäre es denn, wenn du dir in ner Variable (z.B. nem Array) merkst, welche du schon gezogen hast und die Schleife so oft durchläufst bist du 5 verschiedene Zahlen hast?

            Da steckt aber ein Problem: Die Wahrscheinlichkeit, nach N Ziehungen noch nicht fertig zu sein, d.h. 5 verschiedene Zahlen gezogen zu haben, sinkt zwar mit wachsendem N, wird aber für endliches N niemals 0.

            Sauberer ist es, am Anfang alle Zahlen in eine Liste zu schreiben und nach  jeder Ziehung die gezogene Zahl aus der LIste zu entfernen.

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
            1. moin!

              ok. done.
              untenstehender funktion kann ich jetzt die stelle übergeben (von,bis) von der an die checkboxes zufällig ausgewählt werden. das hat den vorteil, dass ich verschiedene bereiche auswählen kann. der dritte parameter gibt an, wieviel zufällig ausgewählt werden sollen.

                
                function checkBoxes(start, ende, anzahl)  
                {  
                 var a = new Array();  
                 var r = new Array();  
                 var z = 0;  
                
                 //checkboxindex in array schreiben und ggf. checkboxes löschen  
                 for(var i=start;i<=ende;++i)  
                 {  
                  a[z] = i;  
                  z++;  
                  document.forms["form"].elements["frage[]"][i].checked = false;  
                 }  
                
                 //zufällige stelle aus array holen und in zufallsarray schreiben  
                 z=0;  
                 for(var i=0;i<anzahl;++i)  
                 {  
                  var stelle = Math.floor((Math.random()*a.length));  
                  r[z] = a[stelle];  
                  a.splice(stelle,1);  
                  z++;  
                 }  
                
                 //checkboxen markieren  
                 for(var i=0;i<r.length;++i)  
                 {  
                  document.forms["form"].elements["frage[]"][r[i]].checked = true;  
                 }  
                }  
              
              

              wenn es noch codeverbesserungen geben sollte, würde ich mich freuen, wenn wir die ausdiskutieren könnten.

              gruß.
              roger.

              --
              meine freundin sagt, ich wäre neugierig.
              so steht's zumindest in ihrem tagebuch.
              1. Moin!

                wenn es noch codeverbesserungen geben sollte, würde ich mich freuen, wenn wir die ausdiskutieren könnten.

                Ich habe deinen Code mal auf dem Papier nachvollzogen, weil die Operationen nicht auf den ersten Blick offensichtlich sind, aber er tut nach meinen Erkenntnissen das, was du erreichen willst. :)

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. moin!

                  Ich habe deinen Code mal auf dem Papier nachvollzogen, weil die Operationen nicht auf den ersten Blick offensichtlich sind, aber er tut nach meinen Erkenntnissen das, was du erreichen willst. :)

                  jop. sonst hätte ich ihn ja nicht gepostet :)
                  ich dachte nur, dass man die ein oder andere schleife evtl. noch vereinfachen könnte oder absichern. meinetwegen auch auf browserkompatibilität hin (hab's nur auf ie, ff und opera getestet).

                  gruß.
                  roger.

                  --
                  meine freundin sagt, ich wäre neugierig.
                  so steht's zumindest in ihrem tagebuch.