Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] ClearInterval nie działa
unnamedly
post
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 5.05.2012

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


[JAVASCRIPT] pobierz, plaintext
  1. $(".bx-start").click(function() {
  2. if($(".bx-count").length)
  3. {
  4. clearInterval(interval);
  5. $(".bx-count").remove();
  6. }
  7. else
  8. {
  9. $(".bx-window").before("<span class='bx-count'>25</span>");
  10. var howmuch = 25;
  11. var interval = setInterval(function() {
  12. howmuch--;
  13. $(".bx-count").html(""+howmuch+"");
  14. if(howmuch == 0)
  15. howmuch = 25;
  16. }, 1000);
  17. }
  18. });
[JAVASCRIPT] pobierz, plaintext


Czyli klikam w .bx-start i jeśli istnieje .bx-count, to ma czyścić mi timer i usuwać span`a. Jeśli nie istnieje, to tworzy .bx-count i ustawia timer, który odlicza od 25 do 0 i tak w kółko.

Problem w tym, że clearInterval() mi nie działa i nie czyści timeru (każdy kolejny timer przy kliknięciu w .bx-start o (chyba) id "interval" działa w tym samym czasie).

Any ideas?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tolomei
post
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Witaj.

Nie jestem w stanie tego przetestować ale domyślam się że błąd tkwi w porozrzucanych deklaracjach var.
Spróbuj tego - jak coś to zobaczymy ponownie.

[JAVASCRIPT] pobierz, plaintext
  1. $(".bx-start").click(function() {
  2. var howmuch, interval;
  3.  
  4. if($(".bx-count").length)
  5. {
  6. clearInterval(interval);
  7. $(".bx-count").remove();
  8. }
  9. else
  10. {
  11. $(".bx-window").before("<span class='bx-count'>25</span>");
  12. howmuch = 25;
  13. interval = setInterval(function() {
  14. howmuch--;
  15. $(".bx-count").html(""+howmuch+"");
  16. if(howmuch == 0)
  17. howmuch = 25;
  18. }, 1000);
  19. }
  20. });
[JAVASCRIPT] pobierz, plaintext


Ogólnie zalecanym zwyczajem przy pisaniu JS-a jest posiadanie jednej deklaracji var na początku każdej funkcji.
Kolejnym dobrym zwyczajem jest używanie setTimeout() w połączeniu z rekurencją.
Dobrze byłoby także przypisać $(".bx-count") do jakiejś zmiennej na początku funkcji. W tej chwili przy każdym wywołaniu skrypt przeszukuje całe drzewo DOM w poszukiwaniu tego elementu. W twoim skrypcie dzieje się to 3 razy, a potem co sekunde. Przy wspomnianej zmianie tylko raz i koniec.

Znowu gaduła mi się włączyła....

Pozdrawiam!
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #3





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


to co mu dałeś też raczej nie zadziała. Powinno się wywalić deklarację var... w ogóle poza funkcję click. Inaczej po prostu za każdym razem się będzie tworzyła nowa zmienna interval, a nie o to chodzi.
Chodzi o to, żeby zmienna była nieco "bardziej globalna".
o tak:
Kod
...
var interval;
$(".bx-start").click(function() {
....


EDIT:

Cytat
Kolejnym dobrym zwyczajem jest używanie setTimeout() w połączeniu z rekurencją.

co masz na myśli? Rekurencja to ogólnie nie jest dobry zwyczaj.

Ten post edytował PrinceOfPersia 9.02.2013, 01:27:17
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 10:49