• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Loop Paradoxon (für mich jedanfalls)

benyo

New member
Hallo liebe Javascripter!

Ich bastle gerade an einem Loop, bei dem eine Folge von Ziffern (1,2) und Fragezeichen alternierend angezeigt wird.
Wenn das Fragezeichen kommt, soll die zuletzt angezeigte Ziffer per Click auf einen Button an eine Datenbank gesendet werden.
Funktioniert soweit ganz gut, ABER:
Ich wundere mich, dass ich innerhalb der Funktion den Zähler "x-2" aufrufen muss, um die zuletzt angezeigte Ziffer aus dem array zu lesen.
Ich würde denken es müsste x-1 sein!?!?

Kann mir jemand einen Denkanstoß geben, worin mein Denkfehler liegt?

Danke! Benyo

Ps: Javascript ist nicht meine Muttersprache, wie man sicher sieht :)

Code:
<script src="http://code.jquery.com/jquery-latest.js"></script>

<div id="anzeige">+</div>

<button id="button">letzte Ziffer?</button>

<script type="text/javascript">

x = 0;

items = ['1','?','2','?'];

function myLoop () {

$("#button").off("click");

document.getElementById("anzeige").innerHTML = items[x];

if (items[x] == '?') { $("#button").click( function (){ $.post("db.php?letzte_ziffer="+items[x-2]); }); }

x++;

if (x < items.length) { setTimeout( myLoop, 1000 ); }

}

myLoop();

</script>
 
... klassisches Problem bei globalen Variablen... es ist schwierig, im Kopf immer den richtigen Zustand zu haben. Deswegen sollte man sie auch nicht verwenden.

So könnte das omplett ohne globale Variablen aussehen:
Code:
<script src="http://code.jquery.com/jquery-latest.js"></script>
<div id="anzeige">+</div>
<button id="button">letzte Ziffer?</button>
<script type="text/javascript">
(function(){
	var x = -1;
	var items = ['1','?','2','?'];

	function myLoop(){
		x += 1;
		
		$("#button").off("click");
		document.getElementById("anzeige").innerHTML = items[x];
		
		if (items[x] == '?'){
			var url = "db.php?letzte_ziffer="+items[x - 1];
			$("#button").click(function(){
				$.post(url);
			});
		}
		
		if (x < items.length){
			window.setTimeout(myLoop, 1000);
		}
	}
	myLoop();
}());
</script>
- ungetestet.
 
Vielen Dank Dormilich!
Vielen Dank kkapsner!
Die Variante mit var x = -1; und x += 1; kannte ich noch nicht.
Man lernt ja nie aus :)
 
nun der inkrement und die stelle an der
er ausgführt wurde war ja alles richtig
es wurde nur vergessen x vor dem erhöhen in einer variablen zwischenzuspeichern was dann kkapsner auch getan hat mit der url variablen.
 
Zurück
Oben