H²O: Math.random() - der Zufallsgenerator auf Textfelder anwenden ?

Hallo.

Folgendes Problem:
Wenn man in das erste Textfeld "frage" schreibt, erscheint im zweiten Textfeld "antwort1".Dafür ist das Script unten.
Wie mache ich es aber jetzt, dass per Zufallsgenerator bestimmt wird welche Antwort ausgegeben wird. Wenn man also "frage" ins 1. Textfeld schreibt soll im 2. entweder "antwort1" oder "antwort2" stehen. Das soll mit Math.random gemacht werden (das denke ich zumindest).
Wenn ihr wisst wie man das macht könnt ihr es mir ja mal schreiben. Hier ist ein Link zu der Math.random-Seite:
http://selfhtml.teamone.de/javascript/objekte/math.htm#random

Wäre nett, wenn mir jemand schreibt, wie man das macht.

Vielen Dank H²O ...

...und hier ist noch schnell das Script:

<script type="text/javascript">
function test() {

var wert = document.forms[0].elements[0].value;
if (wert.indexOf("frage")>-1){
            document.forms[0].elements[0].value = "";
            document.forms[0].elements[1].value = "antwort1";
            document.forms[0].elements[0].focus();
            return false;
}

}
</script>

  1. Hallo.

    Wie mache ich es aber jetzt, dass per Zufallsgenerator bestimmt wird welche Antwort ausgegeben wird. Wenn man also "frage" ins 1. Textfeld schreibt soll im 2. entweder "antwort1" oder "antwort2" stehen. Das soll mit Math.random gemacht werden (das denke ich zumindest).

    Vom Ansatz her nicht falsch. Was du bedenken musst ist, dass Math.random() eine Zufallszahl zwischen 0 und 1 liefert, die du entsprechend noch vervielfältigen und dann runden musst. Mit dem Ergebnis kannst du statt eines fixen Strings ein Arrayelement ausgeben. Was du dazu brauchst, findest du hier:

    Zum Definieren deines Antworten-Arrays:
    http://selfhtml.teamone.de/javascript/objekte/array.htm#allgemeines

    Zum Ermitteln der zufälligen Indexzahl:
    http://selfhtml.teamone.de/javascript/objekte/math.htm#random
    http://selfhtml.teamone.de/javascript/objekte/math.htm#floor

    Grüße
    Siechfred

    1. Hi.

      Ich habe etwas entwickelt.
      Hier soll im Text einfach nur im Text durch Zufall etwas stehen.
      Es klappt aber nicht. Was ist also falsch?

      <html>
      <head>

      <script type="text/javascript">
      <!--

      wert = new Array(5);

      eins = Math.round(Math.random()*5);
       wert[0] = "a";
       wert[1] = "b";
       wert[2] = "c";
       wert[3] = "d";
       wert[4] = "e";
      //-->
      </script>

      </head>
      <body>

      <script type="text/javascript">
      <!--
      document.write = smiley[eins]
      //-->
      </script>

      </body>
      </html>

      Vielen Dank H²O

      1. <script type="text/javascript">
        <!--

        wert = new Array(5);

        eins = Math.round(Math.random()*5);
        wert[0] = "a";
        wert[1] = "b";
        wert[2] = "c";
        wert[3] = "d";
        wert[4] = "e";
        //-->
        </script>

        </head>
        <body>

        <script type="text/javascript">
        <!--
        document.write = smiley[eins]
        //-->
        </script>

        </body>
        </html>

        Vielen Dank H²O

        Du greift im deinem Randomwert weder auf das Array zu noch haste eine Korrektur drinne, wenn die Randomzahl nicht zum Arrayindex passt.

        <script>
        var x = new Array("a","b","c","d","e","f","g","h","i","j");
        --
        Arrays fangen bei 0 an. Der Index 0 ist hier also "a"!
        --
        var y = Math.round(Math.random()*10);
        --
        Da der Array 10 Elemente hat, sollte man den Random mit 10 multiplizieren. Das ganze wird dann noch gerundet.
        --
        y = y - 1
        --
        Da ich beim Random noch nie eine 0 als Ausgabe bekommen habe, korregiere ich das Ergebnis mit -1
        --
        if(y >9) y = 9;
        --
        Wenn die Randomzahl größer als 9 ist so wird diese ebenfalls auf 9 korregiert. Zwar hat das Array 10 Elemente, aber es wird von 0 angefangen. Also haben die Elemente eine Zugriffszahl von 0,1,2...9!
        --
        document.write("Position im Array: "+y+"<br>");
        --
        Ausgabe der Variablen Y (inkl. Korrektur)
        --
        document.write("Gespeicherter Inhalt: "+x[y]);
        --
        Ausgabe des Arraywertes. Auf den Inhalt eines Arrays wird wie folgt zugegriffen.
        x (Array)
        y (Zahl von 0-9)
        Wenn Y = 1 ist, so wird das Element "b" aus dem Array ausgelesen.
        --
        </script>

        -- Text -- bedeutet Erklärung! Beim kopieren müssen diese Zeilen entfernt werden! Logisch oder? :)

        1. Hi.

          Vielen Dank für das Script, aber ich will das nun auf ein Textfeld anwenden, aber das krieg ich nicht hin.

          Was ist denn jetzt wieder an diesem Script falsch?

          <script>
          var x = new Array("a","b","c","d","e","f","g","h","i","j");
          var y = Math.round(Math.random()*10);
          y = y - 1
          if(y >9) y = 9;
          document.write("Position im Array: "+y+"<br>");
          document.forms[0].elements[0].value = ("Gespeicherter Inhalt: "+x[y]);
          </script>

          Vielen Dank H²O

      2. Hi,

        Hi.

        Ich habe etwas entwickelt.
        Hier soll im Text einfach nur im Text durch Zufall etwas stehen.
        Es klappt aber nicht. Was ist also falsch?

        document.write = smiley[eins]

        Sollte wohl so heißen:

        document.write(wert[eins])

        Weil der Syntax eben document.write() heißt und Du das array mit dem Namen "wert" und nicht "smiley" definiert hast.

        Außerdem solltest Du noch eine Zeile mit
         wert[5] = "f";
        einfügen, da "eins" auch 5 werden kann.

        Wobei die 0 und die 5 unwahrscheinlicher ist als jede andere Zahl, da sich für z.B. 4,5 <= Math.random()*5 <= 5 eins = 5 ergibt, für 1,5 <= Math.random()*5 < 2,5 aber eins = 2.

        Um den Fehler einigermaßen auszugleichen würde ich den Wert für 0 und 5 gleich setzten, also:
        if (eins==5) eins=0
        und dafür die Zeile
         wert[5] = "f";
        wieder löschen.

        Grüße,

        Ronny

      3. Hallo.

        Ich habe etwas entwickelt.
        Es klappt aber nicht. Was ist also falsch?

        Wie du dein Array besser definierst, wurde dir bereits gesagt.

        eins = Math.round(Math.random()*5);

        Hier würde ich zur Verwendung von Math.floor() neigen, das erspart dir eine Gültigkeitsprüfung oder die Korrektur um 1:

        var eins = Math.floor(Math.random()*10);

        Das liefert dir eine Ganzzahl zwischen 0 und 9, 10 ist die Anzahl der Elemente deines Arrays.

        Grüße
        Siechfred