Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]while() nie czeka na setTimeout()
Forum PHP.pl > Forum > Przedszkole
LewyM1
Witam, mam problem z dwoma funkcjami: while() i setTimeout(). Napisałem skrypt, który co jakiś czas wykonuje jakieś zadanie, w moim przypadku jest to wyświetlenie tekstu co 5 sekund. Niestety, while() nie czeka na wykonanie setTimeout(). Chciałem zastąpić while jakąś inną funkcją, ale właśnie nie wiem którą, bo dopiero poznaję ten język. smile.gif
  1. <script type="text/javascript">
  2. function echo(x, y) {
  3. document.getElementById(y).innerHTML = x;
  4. }
  5. function powtarzaj(wykonaj, czas) {
  6. // czas podajemy w sekundach
  7. var i = 0;
  8. var id = 1;
  9. czas = czas/100;
  10. while (i <= id) {
  11. setTimeout(wykonaj, czas);
  12. i++;
  13. id++;
  14. }
  15. }
  16. </head>
  17. <body onload="powtarzaj(echo('Witam', 'wynik'), 5)">
  18. <p id="wynik"></p>
  19. </body>
  20. </html>

Pozdrawiam, Lewy.
nospor
W ogóle nie załapałeś na czym to polega wink.gif
Jak chcesz mieć cos co x czasu to do tego używa się setInterval() i to bez pętli.
Możesz również użyć setTimeout, ale nie w pętli ale poprostu na koncu funkcji, która jest wywolywana z setTimeout musisz znowu odpalić setTimeout
LewyM1
Ok, poprawione, ale teraz funkcja setInterval() działa jednorazowo. Sprawdziłem na przykładzie wyświetlania sekundy:
  1. <script type="text/javascript">
  2. function sekunda() {
  3. czas = new Date();
  4. sekunda = czas.getSeconds();
  5. return sekunda;
  6. }
  7. function echo(x, y) {
  8. document.getElementById(y).innerHTML = x;
  9. }
  10. function powtarzaj(wykonaj, czas) {
  11. // czas podajemy w sekundach
  12. czas = czas * 100;
  13. setInterval(wykonaj, czas);
  14. }
  15. </head>
  16. <body onload="powtarzaj(echo(sekunda(), 'wynik'), 1)">
  17. <p id="wynik"></p>
  18. </body>
  19. </html>
nospor
To jakaś sieczka a nie kod....

Masz tu proste przykłady
http://www.elated.com/articles/javascript-...nd-setinterval/
Zrob je a potem popraw swoje.

Poza tym takie cos:
echo(sekunda(), 'wynik')
powoduje wykonanie funkcji a nie przekazanie jej jako parametr. Wiec wykonuje ci się raz bo od razu to odpalasz

Oraz sekunda to 1000 milisekund a nie 100
LewyM1
Problem rozwiązany. Dziękuję za szybką odpowiedź.
Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.