Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript] powtarzana funkcja, nie dziala :(
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
zeroszumu
Witam, mam taki problem, mam funkcję "counter", ktora odlicza mi czas, jest tylko problem, gdy użyje funkcji 2x, to nie dziala.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html>
  3. <head>
  4. <title>Przekierowanie</title>
  5. <script type="text/javascript">
  6. var secs = 0; //**** liczba sekund do odliczenia
  7. var element = 'czas'; //**** atrybut "id" elementu wyświetlającego wynik
  8. var T = null;
  9. function count(id){
  10. temp = secs;
  11.  
  12. if(secs > 0){
  13.  
  14. //**** ten kawałek kodu "rozbija" sekundy na inne jednostki
  15.  
  16. result = Math.floor(temp / 86400) + ' dni ';
  17. temp %= 86400;
  18. result += Math.floor(temp / 3600) + ' godzin ';
  19. temp %= 3600;
  20. result += Math.floor(temp / 60) + ' minut ';
  21. temp %= 60;
  22. result += temp + ' sekund';
  23. document.getElementById(element).innerHTML = result; //**** wypisanie stanu zegara
  24.  
  25. secs--;
  26. }else{
  27. document.location="http://google.pl"
  28. clearInterval(T);
  29. }
  30.  
  31. }
  32. function counter(days, hours, minutes, seconds){
  33.  
  34. secs = days*86400 + hours*3600 + minutes*60 + seconds;
  35.  
  36. T = window.setInterval("count()", 1000);
  37. //count();
  38. }
  39.  
  40.  
  41. </script>
  42. </head>
  43. <body>
  44. <div id="czas"></div>
  45. <script type="text/javascript">counter(0,0,0,8);</script>
  46. <script type="text/javascript">counter(0,0,0,16);</script>
  47. </body>
  48. </html>
Crozin
Nie działa, bo masz durną funkcję, która korzysta ze zmiennych globalnych (secs, element, T). Zamień je na lokalne i po problemie.
zeroszumu
Cytat(Crozin @ 21.02.2012, 19:32:31 ) *
Nie działa, bo masz durną funkcję, która korzysta ze zmiennych globalnych (secs, element, T). Zamień je na lokalne i po problemie.


zmienialem, nie dzialalo. sad.gif
Necsord
Jaki efekt ma mieć użycie drugi raz tej funkcji? Usunięcie poprzedniego licznika i dodanie nowego?
zeroszumu
nie, dodanie kilku liczników, mierzący inne czasu smile.gif
Crozin
Cytat
zmienialem, nie dzialalo.
Czyli pewnie źle zmieniłeś... ale jak zmieniłeś to już nie pokazałeś więc czego teraz od nas oczekujesz?
zeroszumu
Cytat(Crozin @ 21.02.2012, 20:07:17 ) *
Czyli pewnie źle zmieniłeś... ale jak zmieniłeś to już nie pokazałeś więc czego teraz od nas oczekujesz?


  1. <script type="text/javascript">
  2. function count(id, element){
  3. var secs = 0;
  4. var element = element; //**** atrybut "id" elementu wyświetlającego wynik
  5. var T = null;
  6.  
  7. temp = secs;
  8.  
  9. if(secs > 0){
  10.  
  11. //**** ten kawałek kodu "rozbija" sekundy na inne jednostki
  12.  
  13. result = Math.floor(temp / 86400) + ' dni ';
  14. temp %= 86400;
  15. result += Math.floor(temp / 3600) + ' godzin ';
  16. temp %= 3600;
  17. result += Math.floor(temp / 60) + ' minut ';
  18. temp %= 60;
  19. result += temp + ' sekund';
  20. document.getElementById(element).innerHTML = result; //**** wypisanie stanu zegara
  21.  
  22. secs--;
  23. }else{
  24. document.location="http://google.pl"
  25. clearInterval(T);
  26. }
  27.  
  28. }
  29. function counter(secs, element){
  30.  
  31. secs =secs;
  32.  
  33. T = window.setInterval("count('"+element+"')", 1000);
  34. }
  35.  
  36.  
  37. </script>
  38. </head>
  39. <body>
  40. <div id="czas"></div>
  41. <div id="czas2"></div>
  42. <script type="text/javascript">counter(61, 'czas');</script>
  43. <script type="text/javascript">counter(80, 'czas2');</script>
Crozin
Ale zauważyłeś, że w funkcji count() (w jej wnętrzu) najpierw definiujesz zmienną secs, która zawsze będzie miała wartość zero po czym masz bezsensowny warunek sprawdzający czy secs aby przypadkiem nie jest większe od zera.

Nie wspominając o tym, że:
1. W funkcji counter() niepotrzebnie zmiennej secs przypisujesz wartość zmiennej secs, oraz korzystasz z niezadeklarowanej zmiennej T.
2. Za takie potworki powinni palce ucinać:
[JAVASCRIPT] pobierz, plaintext
  1. window.setInterval("count('"+element+"')", 1000);
[JAVASCRIPT] pobierz, plaintext
[JAVASCRIPT] pobierz, plaintext
  1. window.setInterval(function() {
  2. count(element);
  3. }, 1000);
[JAVASCRIPT] pobierz, plaintext

3. W funkcji count() wspomniane już każdorazowe ustawienie zmiennej secs na zero, oraz błędne (i niepotrzebne) zdefiniowanie zmiennej element o wartości zmiennej element.
4. Zmienna T mająca zawsze wartość NULL, w dodatku użyta w clearInterval().
5. Zmienna temp nie została zadeklarowana.

Podpowiedź:
Zmienne T oraz secs powinny istnieć poza zasięgiem funkcji count() i być do niej przekazywane. Dodatkowo zmniejszenie wartości zmiennej secs oraz użycie clearInterval() również powinno być poza funkcją count().
zeroszumu
Cytat(Crozin @ 21.02.2012, 20:24:37 ) *
Ale zauważyłeś, że w funkcji count() (w jej wnętrzu) najpierw definiujesz zmienną secs, która zawsze będzie miała wartość zero po czym masz bezsensowny warunek sprawdzający czy secs aby przypadkiem nie jest większe od zera.

Nie wspominając o tym, że:
1. W funkcji counter() niepotrzebnie zmiennej secs przypisujesz wartość zmiennej secs, oraz korzystasz z niezadeklarowanej zmiennej T.
2. Za takie potworki powinni palce ucinać:
[JAVASCRIPT] pobierz, plaintext
  1. window.setInterval("count('"+element+"')", 1000);
[JAVASCRIPT] pobierz, plaintext
[JAVASCRIPT] pobierz, plaintext
  1. window.setInterval(function() {
  2. count(element);
  3. }, 1000);
[JAVASCRIPT] pobierz, plaintext

3. W funkcji count() wspomniane już każdorazowe ustawienie zmiennej secs na zero, oraz błędne (i niepotrzebne) zdefiniowanie zmiennej element o wartości zmiennej element.
4. Zmienna T mająca zawsze wartość NULL, w dodatku użyta w clearInterval().
5. Zmienna temp nie została zadeklarowana.

Podpowiedź:
Zmienne T oraz secs powinny istnieć poza zasięgiem funkcji count() i być do niej przekazywane. Dodatkowo zmniejszenie wartości zmiennej secs oraz użycie clearInterval() również powinno być poza funkcją count().


ps. kod na pojedyńcze odliczanie dzialal...

  1. <script type="text/javascript">
  2. function count(element){
  3. var element = element;
  4. temp = secs;
  5.  
  6. if(secs > 0){
  7. result = Math.floor(temp / 86400) + ' dni ';
  8. temp %= 86400;
  9. result += Math.floor(temp / 3600) + ' godzin ';
  10. temp %= 3600;
  11. result += Math.floor(temp / 60) + ' minut ';
  12. temp %= 60;
  13. result += temp + ' sekund';
  14. document.getElementById(element).innerHTML = result;
  15.  
  16. secs--;
  17. } else {
  18. document.location="http://google.pl"
  19. }
  20. }
  21.  
  22. function counter(secs, element){
  23. window.setInterval(function() {
  24. count(element);
  25. }, 1000);
  26. }
  27.  
  28.  
  29. </script>
  30. </head>
  31. <body>
  32. <div id="czas"></div>
  33. <script type="text/javascript">counter(61, 'czas');</script>


zrobiłem to tak, nie wiem czy dobrze -.-
Crozin
1. http://www.google.pl/webhp?sourceid=chrome...600&bih=775
2. Twój skrypt nie powinien mieć ani jednej zmiennej globalnej.
zeroszumu
Cytat(Crozin @ 21.02.2012, 20:50:23 ) *
1. http://www.google.pl/webhp?sourceid=chrome...600&bih=775
2. Twój skrypt nie powinien mieć ani jednej zmiennej globalnej.


proszę o pomoc, nie poradze sobie ;<
kamil4u
W czym sobie nie poradzisz? Dostałeś radę "Twój skrypt nie powinien mieć ani jednej zmiennej globalnej.". Zrób to i wróć, gdy będziesz miał nadal jakiś problem. To naprawdę są podstawy JS, opisane w tysiącach kursów. Musisz to zrozumieć, żeby zacząć programować.

Nawet trudno Ci jakoś konkretniej pomóc( nie dając gotowca ). Czego od nas oczekujesz? Już nie mówiąc o tym, że zainteresowanie tematem zajęło Ci 3min. Nawet się nie starałeś... Zero zaangażowania z Twojej strony, a oczekujesz, że my rzucimy wszystko i zrobimy to za Ciebie. Wykaż inicjatywę, przedstaw dokładnie swoje przemyślenia/problemy to my zauważymy, że Ci zależy, że naprawę tego nie rozumiesz, a nie, że jesteś po prostu leniwy. Wtedy dopiero z przyjemnością pomagamy smile.gif
zeroszumu
więcej nauczyłbym się dostają chociaż jakąś wskazówke kodu, nie znam angielskiego dobrze. pozdrawiam,
kamil4u
1. Czytasz: "javascript global local variables"
2. Stwierdzasz, że nie znam angielskiego
3. Włączasz translator: http://translate.google.pl/
4. Wpisujesz frazę, powstaje Ci: "lokalne zmienne globalne javascript"
5. Jako, że translator nie jest idealny poprawiasz słownictwo, żeby było z sensem: "zmienne lokalne i globalne javascript"
6. Wpisujesz w google
7. Wchodzisz po kolei do linków i czytasz
8. Jeżeli wydaje Ci się, że rozumiesz próbujesz zmienić swój kod
9. a ) Jeżeli Ci się udało i wszystko działa dziękujesz za pomoc
b ) Jeżeli Ci się udało, ale program nadal nie działa,prosisz o dalszą pomoc - dajesz kod i opisujesz dokładniej problem
c ) Jeżeli Ci się nie udało wracasz do punktu 7
d ) Jeżeli po wielu próbach nadal Ci się nie udaje( co jest mało prawdopodobne ) przychodzisz na forum wklejasz 2-3 swoje próby( które Twoim zdaniem są najbliższe rozwiązania i prosisz o wskazówki, bo nadal tego nie rozumiesz

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.