Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] problem z setTimeout
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Qcumbeer
Siema, chcialem stworzyc prosty skrypt ktory odliczalby do weekendu winksmiley.jpg Niestety nie działa tak jak bym tego chciał -.- Wydaje mi sie ze problem jest z funkcja setTimeout ktora wg. mnie powinna wlaczac funkcje czas od nowa (czyli w sumie cały skrypt) po upływie 1s.
Tutaj kod:

  1.  
  2. <script LANGUAGE="JavaScript">
  3. <!--
  4.  
  5. function czas(){
  6.  
  7. now = new Date()
  8. var godz = now.getHours();
  9. var min = now.getMinutes();
  10. var sec = now.getSeconds();
  11. document.write("<center><br><br>")
  12.  
  13. if (now.getDay() == 5)
  14. document.write("NIE<br><br>Pozostało:<br>" + Math.floor(23 - godz) + " godzin " + Math.floor(59 - min) + " minut " + Math.floor(59 - sec) + " sekund")
  15.  
  16. if (now.getDay() == 6)
  17. document.write("<b>TAK!</b>")
  18.  
  19. if (now.getDay() == 0)
  20. document.write("<b>TAK!</b>")
  21.  
  22. if (now.getDay() == 1)
  23. document.write("<b>NIE</b><br><br>Pozostało:<br>" + Math.floor(119 - godz) + " godzin " + Math.floor(59 - min) + " minut " + Math.floor(59 - sec) + " sekund")
  24.  
  25. if (now.getDay() == 2)
  26. document.write("<b>NIE</b><br><br>Pozostało:<br>" + Math.floor(95 - godz) + " godzin " + Math.floor(59 - min) + " minut " + Math.floor(59 - sec) + " sekund")
  27.  
  28. if (now.getDay() == 3)
  29. document.write("<b>NIE</b><br><br>Pozostało:<br>" + Math.floor(71 - godz) + " godzin " + Math.floor(59 - min) + " minut " + Math.floor(59 - sec) + " sekund")
  30.  
  31. if (now.getDay() == 4)
  32. document.write("<b>NIE</b><br><br>Pozostało:<br>" + Math.floor(47 - godz) + " godzin " + Math.floor(59 - min) + " minut " + Math.floor(59 - sec) + " sekund ")
  33.  
  34. document.write("</center>")
  35. setTimeout('czas()',1000);
  36.  
  37. }
  38.  
  39. onload=function(){czas();}
  40.  
  41. //-->
  42.  
  43. </body>
  44. </html


Mam nadzieje ze ktos mi powie co jest nie tak smile.gif (Dzisiaj jest niedziela i skrypt wyswietla "TAK", problem jest gdy powinien odliczac wiec przestawcie sobie date w windowsie na np. wtorek i zobaczycie o co kaman).
Pozdrawiam.
yahreck
Nie tylko Ty Qcumbeer masz z tym problem.
Ja mam jeszcze prostszy skrypt typu timer, którego zadaniem jest odliczanie w dół np. od 10 do zera co sekundę i nie działa.

Mój problem polega na tym, że funkcja zmniejsz() po wywołaniu wykonuje się i zmniejsza argument 10 o 1 czyli wynik jest 9, a wewnątrz niej funkcja setTimeout() wywołuje ponownie funkcję zmniejsz(), ale tylko raz i 9 zmniejsza o 1 do 8, a potem wygląda na to, że przeglądarka się zapętla, bo w kółko kręci, kręci, kręci... i stoi na wyniku 8.
Co jest źle?
  1. <script type="text/javascript">
  2. function zmniejsz(czas) {
  3. wynik = czas-1;
  4. if (wynik!=0) {
  5. document.write (wynik)
  6. setTimeout('zmniejsz(wynik)', 1000);
  7. } else {
  8. document.write ("koniec")
  9. }
  10. }
  11. </head>
  12. <body onload="zmniejsz(10);">
  13. </body>
  14. </html>
Qcumbeer
hehe no troche mnie pocieszyles tongue.gif no wlasnie nie moge zrozumieć dlaczego w tym skrypcie to działa! \/

  1. <script type="text/javascript">
  2. function CD(d,o,t,x){return[x=~~(t=(d-o)/864e5),x=~~(t=(t-x)*24), x=~~(t=(t-x)*60),~~((t-x)*60)]}
  3. function R(t){
  4. t=CD(new Date(2010,03,31,17,00,00),new Date());
  5. document.getElementById('costam').innerHTML='<center><b>Event<br>za:</b><br>'+t[0]+" dni, "+t[1]+" h, "+t[2]+" min, "+t[3]+"s"+"</center>";
  6. if((!t[0]&&!t[1]&&!t[2]&&!t[3]) || (t[0] <= 0 && t[1] <= 0 && t[2] <= 0 && t[3] <= 0))
  7. document.getElementById('costam').innerHTML='Dzisiaj jest<br><br>Event!';
  8. else
  9. setTimeout('R()',1e3);
  10. }
  11.  
  12. onload=function(){R();}
  13.  
  14.  
  15. <div id="costam"></div>
  16. </body>
  17. </html>



tylko ze ten odlicza do danej daty (i zle liczy dni) a ja hce zeby odliczal do powiedzmy piatku 18:00, od piatku 18:00 do niedzieli 24:00 byl komunikat ze jest weekend a potem od poniedzialku dalej odliczal do piatku 18:00,

na prawde nikt nie wie co jest z tym nie tak? nikt nie pomoze?
yahreck
U mnie zadziałało, gdy wyświetlanie wyników przerzuciłem do okienka tekstowego.
Może i Ty Qcumbeer musisz zrobić coś podobnego?
  1. <script type="text/javascript">
  2. function zmniejsz(czas) {
  3. wynik = czas-1;
  4. if (wynik!=0) {
  5. document.getElementById('czas').value = wynik
  6. setTimeout('zmniejsz(wynik)', 1000);
  7. } else {
  8. document.write ("koniec")
  9. }
  10. }
  11. </head>
  12. <body onload="zmniejsz(10);">
  13. <form>
  14. <input type="text" id="czas" />
  15. </form>
  16. </body>
  17. </html>


Cytat(Qcumbeer @ 24.03.2010, 07:47:33 ) *
nie moge zrozumieć dlaczego w tym skrypcie to działa! \/
  1. ...
  2. <div id="costam"></div>
  3. ...

Może dlatego działa, że wynik jest zwracany w miejscu znaczników <div> ?
Qcumbeer
ok, dzieki wielkie yahreck za podpowiedz z tym okienkiem tekstowym smile.gif) w diva nie chcialo mi sie bawic. dla zainteresowanych pokombinowalem troche zeby to nie wygladalo tak brzydko jak okienko i skrypt teraz wyglada tak:


  1. input{border:none;font: 12pt/12pt Verdana, serif;}
  2. input:disabled{background-color:#ffffff;}
  3. </style>
  4.  
  5. <script LANGUAGE="JavaScript">
  6. <!--
  7.  
  8. function czas(){
  9.  
  10. now = new Date()
  11. var godz = now.getHours();
  12. var min = now.getMinutes();
  13. var sec = now.getSeconds();
  14.  
  15. if (now.getDay() == 5){
  16. if (godz < 17){
  17. document.getElementById('wynik').value="pozostało: " + Math.floor(16 - godz) + "h " + Math.floor(59 - min) + "m " + Math.floor(59 - sec) + "s";
  18. document.getElementById('lol').value="NIE";
  19. }
  20. else{
  21. document.getElementById('wynik').value="";
  22. document.getElementById('lol').value="TAK!";
  23. document.getElementById('weekend').value="Można świętować!";
  24. }
  25. }
  26.  
  27. if (now.getDay() == 6){
  28. document.getElementById('wynik').value="";
  29. document.getElementById('lol').value="TAK!";
  30. document.getElementById('weekend').value="Można świętować!";
  31. }
  32.  
  33. if (now.getDay() == 0){
  34. document.getElementById('wynik').value="";
  35. document.getElementById('lol').value="TAK!";
  36. document.getElementById('weekend').value="Można świętować!";
  37. }
  38.  
  39. if (now.getDay() == 1){
  40. document.getElementById('wynik').value="pozostało: " + Math.floor(112 - godz) + "h " + Math.floor(59 - min) + "m " + Math.floor(59 - sec) + "s";
  41. document.getElementById('lol').value="NIE";
  42. }
  43.  
  44. if (now.getDay() == 2){
  45. document.getElementById('wynik').value="pozostało: " + Math.floor(88 - godz) + "h " + Math.floor(59 - min) + "m " + Math.floor(59 - sec) + "s";
  46. document.getElementById('lol').value="NIE";
  47. }
  48.  
  49. if (now.getDay() == 3){
  50. document.getElementById('wynik').value="pozostało: " + Math.floor(64 - godz) + "h " + Math.floor(59 - min) + "m " + Math.floor(59 - sec) + "s";
  51. document.getElementById('lol').value="NIE";
  52. }
  53.  
  54. if (now.getDay() == 4){
  55. document.getElementById('wynik').value="pozostało: " + Math.floor(40 - godz) + "h " + Math.floor(59 - min) + "m " + Math.floor(59 - sec) + "s";
  56. document.getElementById('lol').value="NIE";
  57. }
  58.  
  59. setTimeout('czas()',1000);
  60.  
  61. }
  62.  
  63. //-->
  64. </SCRIPT>
  65.  
  66. </head>
  67.  
  68. <body onload="czas();">
  69. <br>
  70. <input type="text" id="lol" style="text-align:center;font-size:70" size="3" disabled><br><br>
  71. <input type="text" id="wynik" style="font-size:small;text-align:center;" size="21" disabled><br>
  72. <input type="text" id="weekend" style="font-size:small;text-align:center;" size="21" disabled>
  73. </form>
  74.  
  75. </body>
  76. </html>



i wszystko działa pieknie jak nalezy smile.gif
Kopiowanie jak najbardziej wskazane biggrin.gif

peace
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.