Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]while() nie czeka na setTimeout()
LewyM1
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 22.02.2011
Skąd: Sierpc

Ostrzeżenie: (0%)
-----


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. (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W ogóle nie załapałeś na czym to polega (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
LewyM1
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 22.02.2011
Skąd: Sierpc

Ostrzeżenie: (0%)
-----


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>


Ten post edytował LewyM1 21.04.2011, 12:54:43
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
LewyM1
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 22.02.2011
Skąd: Sierpc

Ostrzeżenie: (0%)
-----


Problem rozwiązany. Dziękuję za szybką odpowiedź.
Pozdrawiam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 00:34