ugrás a tartalomhoz

Javascript timing

Matyas87 · 2010. Ápr. 29. (Cs), 13.24
Helló, 1 kockapoker progit próbálok csinálni, és a dobásnál szeretném ha "animációval" 1 secenként váltaná a képeket, így néz ki a kód:
  1. function roll() {  
  2.     for (var i = 0 ; i<5 ; i++) {  
  3.         first_Roll(i);  
  4.     }  
  5. }  
  6.   
  7. function first_Roll(thisDice) {  
  8.     var currDice = "dice" + thisDice;  
  9.     var t = setTimeout("document.getElementById(currDice).src = '_img/_dices/roll.jpg'",1000);  
  10. }  
És vmiért nem müködik, azt irja ki a hibakonzolba h a currDice nincs definiálva, hogy lehetne ezt megoldani?köszi
 
1

Closure-ral

Török Gábor · 2010. Ápr. 29. (Cs), 13.44
A setTimeout-ban megadott kód nem a first_Roll hatókörében fog lefutni, így nem lesz hozzáférése a függvényben deklarált változóhoz. Más megfontolás miatt is szerencsésebb a setTimeout-nak névtelen függvénnyel átadni az időzítendó kódot. Valahogy így:
  1. function first_Roll(thisDice) {  
  2.     var currDice = "dice" + thisDice;  
  3.     var t = setTimeout(function() {  
  4.             document.getElementById(currDice).src = '_img/_dices/roll.jpg'";  
  5.         }, 1000);  
  6.   
  7. }  
Így már a lexikális zárvány miatt hozzáfér a burkoló függvény változóihoz.
2

köszi szépen igy müködik!

Matyas87 · 2010. Ápr. 29. (Cs), 22.25
köszi szépen igy müködik!