DaSeta: Zufalls funktion wird nicht neu aufgerufen

HAllo!

Mein Script besteht aus 2 teilen, einmal die Zufalls Funktion

function GetRandom( min, max ) {  
	if( min > max ) {  
		return( -1 );  
	}  
	if( min == max ) {  
		return( min );  
	}  
	return( min + parseInt( Math.random() * ( max-min+1 ) ) );  
}

Die auch funktioniert,
dan die Schleife die die Zufalls Funktion immer wiederaufruft:

	x = 0;  
	badone = "<img id='badone' src='7.png'>";  
	while(x != 500){  
		ran = GetRandom(10000,15000);  
		setTimeout('$("#wrapper").append(badone);', ran);  
		x = x+1;  
	}

Komischerweise wartet das Script jetzt aber nur einmal, also es wird einmal eine zufällige Zeit gewartet dan werden die restlichen badone elemente alle einfach so hintereinander eingefügt (man erkennt aber das sie hintereinander kommen)

Wenn ich am ende der schleife ein alert(ran); setze sehe ich aber auch lauter verschiedene Zahlen.

Ich versuche damit eine art Moorhuhnjagt in Ajax zu basteln, und bis auf das ist eigentlich auch nichts ein Problem...

Danke schonmal
L.g. Seta

  1. Hallo,

    Komischerweise wartet das Script jetzt aber nur einmal, also es wird einmal eine zufällige Zeit gewartet dan werden die restlichen badone elemente alle einfach so hintereinander eingefügt (man erkennt aber das sie hintereinander kommen)

    setTimeout blockiert beim Aufruf nicht! Deine Schleife ermittelt eine Zufallszahl, das setTimeout wird mit dieser Zahl aufgerufen...aber das Programm bleibt hier nicht stehen!

    Das "setTimeout" wird abgesetzt, und dann geht es auch schon weiter mit x=x+1.
    Das geht so durch, bis die 500 Durchläufe durch sind (was vermutlich relativ fix geht, also im Bereich von wenigen Milisekunden).
    Dann passiert lange Zeit (also 10-15 Sekunden etwa ;) ) nichts mehr.

    Irgendwann (nach 10-15 Sekunden) schlagen dann die ganzen setTimeout-Events ein. Diese haben zwar verschiedene Wartezeiten bekommen, Du hast sie aber dicht hintereinander (in der Schleife) abgesetzt, deswegen kommen die jetzt alle "Schlag auf Schlag".

    -> Lösung:
    Schreibe eine eigene Funktion, die ein Element einfügt, eine neue "Zufallszeit" bestimmt, und sich dann per window.setTimeout wieder selbst aufruft.

    Hope that helps.

    Viele Grüße,
    Jörg

    1. Hey Jörg

      -> Lösung:
      Schreibe eine eigene Funktion, die ein Element einfügt, eine neue "Zufallszeit" bestimmt, und sich dann per window.setTimeout wieder selbst aufruft.

      Danke für die Tolle erklärung und den Lösungsvorschlag!

      Funktioniert jetzt natürlich wunderbar ^^

      L.g.

  2. HAllo!

    Mein Script besteht aus 2 teilen, einmal die Zufalls Funktion

    function GetRandom( min, max ) {

    if( min > max ) {
    return( -1 );
    }
    if( min == max ) {
    return( min );
    }
    return( min + parseInt( Math.random() * ( max-min+1 ) ) );
    }

      
    Tipp: du solltest vielleicht mal folgendes lesen: http://aktuell.de.selfhtml.org/weblog/javascript-zufallszahlen