Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JS] Problem z ClearInterval
tomeknh
post
Post #1





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

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


Witam!

Mam Kod

  1. function play(){
  2. // play
  3. var interval;
  4. interval = setInterval(function(){
  5. $('#galPr').trigger('click');
  6. },6000);
  7.  
  8. // stop
  9. $("#galSr").click(function() {
  10. clearInterval(interval);
  11. }
  12. );
  13.  
  14. }



Wszystko ładnie działa. Jednak gdy ktoś nie wyłączy funkcji auto Play klikając w przycisk #galSr i przejdzie na inną podstrone....potem wróci na strone z galeria spowrotem interval nie jest wyczyszczony i tworzy sie dodatkowo tak jakby nowo i zdjecia zmieniaja sie z rozna predkoscia (jakby byly dwa intervaly)
oraz nie da sie juz wylaczyc w ogole funkcji auto play nawet naciskajac na przycisk #galSr

Dodam że podstrony ładuję w stylu AJAX - gdybym odświeżył stronę problemu nie ma.
Go to the top of the page
+Quote Post
flashdev
post
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(tomeknh @ 6.08.2010, 22:59:36 ) *
[...]
Dodam że podstrony ładuję w stylu AJAX - gdybym odświeżył stronę problemu nie ma.


No i tutaj sam sobie odpowiedziałeś na pytanie. Przecież to oczywiste, że jak ładujesz stronę w ajax`ie, to skrypty nie są przeładowywane, a niewyczyszczony interval nadal działa. Tworzysz nowy interval - wtedzy działają dwa, a na dodatek referencję do tego pierwszego nieodwracalnie sobie nadpisujesz.
Rozwiązaniem jest po prostu wyczyszczenie interval`a w chwili wczytania strony.

Ten post edytował flashdev 6.08.2010, 23:12:22


--------------------
Go to the top of the page
+Quote Post
tomeknh
post
Post #3





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

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


Ale właśnie problem w tym, że jak dodam clearInterval do akcji przycisku który ładuję nową stronę to niestety w ogóle nie czyści mi tego interval......

window.clearInterval(interval2);

dodanie takiego czegoś ppoza funkcja play(); blokuje mi w ogole skrypt i funkcja przestaje działać..
Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Kod
alert(interval);


Sprawdź czy przypadkiem nie zawiera undefined - może odwołujesz się do zmiennej tam gdzie jej nie ma.
Nie widzę kodu, więc poza domysłami nic nie pomogę.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A masz w tamtym miejscu w ogóle zasięg do zmiennej wskaźnika stopera? winksmiley.jpg

Z tego, co pamiętam, to wszystkie funkcje interval/timeout działają w kontekście globalnym, więc trzeba stoper umieszczać globalnie.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
tomeknh
post
Post #6





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

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


Gdy dodałem do przycisku

alert(interval);

W ogóle nie pokazuję mi alerta....traktuję jakby w ogóle nie było tego kodu....



EDIT

Udało mi się rozwiązać
1. usunięcie z funkcji play kodu: var interval;
2. odwoływanie się potem do czyszczenia z dopiską window: window.clearInterval(interval2);
3. Zmiana nazw interval1 oraz interval2


dzieki za pomoc w naprowadzaniu na rozwiazanie!!!!!! pozdrawiam

Ten post edytował tomeknh 7.08.2010, 14:11:14
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 07:46