Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [javascript] powtarzana funkcja, nie dziala :(
zeroszumu
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


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>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Nie działa, bo masz durną funkcję, która korzysta ze zmiennych globalnych (secs, element, T). Zamień je na lokalne i po problemie.
Go to the top of the page
+Quote Post
zeroszumu
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


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. (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Necsord
post
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

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


Jaki efekt ma mieć użycie drugi raz tej funkcji? Usunięcie poprzedniego licznika i dodanie nowego?
Go to the top of the page
+Quote Post
zeroszumu
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


nie, dodanie kilku liczników, mierzący inne czasu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


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>


Ten post edytował zeroszumu 21.02.2012, 20:14:09
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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().

Ten post edytował Crozin 21.02.2012, 20:26:29
Go to the top of the page
+Quote Post
zeroszumu
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


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 -.-
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. http://www.google.pl/webhp?sourceid=chrome...600&bih=775
2. Twój skrypt nie powinien mieć ani jednej zmiennej globalnej.
Go to the top of the page
+Quote Post
zeroszumu
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


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 ;<
Go to the top of the page
+Quote Post
kamil4u
post
Post #12





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zeroszumu
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.11.2011

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


więcej nauczyłbym się dostają chociaż jakąś wskazówke kodu, nie znam angielskiego dobrze. pozdrawiam,
Go to the top of the page
+Quote Post
kamil4u
post
Post #14





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


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
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: 22.08.2025 - 18:46