![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z funkcją setTimeOut. Przy takim kodzie
Dostaję alerty co chwilę mimo że powinny pojawiać się co 3 sekundy. O co może chodzić? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
setTimeout(change(slider), 3000);
Zobacz w manualu js jak sie wywołuje setTimeout bo to co ty teraz robisz to zwykłe odpalenie funkcj z paramettrem change(slider) więc nic dziwnego ze odpala ci się od razu... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
musisz podać funkcję jako parametr, bez jej wywołania, o tak:
Kod setTimeout(change, 3000); // bez nawiasów tylko w ten sposób Ci się "gubi" informacja o sliderze. Więc musisz użyć sztuczki, np. stworzyć drugą funkcję, która będzie wywoływała tę twoją: Cytat setTimeout(function() { change(slider); }, 3000); function() { .......KOD.........} tworzy funkcję anonimową jest jeszcze metoda bind i mógłbyś tak napisać: Kod setTimeout(change.bind(this, slider), 3000); ale to nie będzie Ci działać we wszystkich przeglądarkach. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Więc musisz użyć sztuczki Ja po prostu piszę:
i działa. Trzeba oczywiscie pamiętać że slider bezie pobrany również za 3s a nie natychmiast, lecz w podanym przykładzie nie ma z tym problemu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ja po prostu piszę: [HTML] pobierz, plaintext setTimeout("change(slider)", 3000); [HTML] pobierz, plaintext i działa. ależ to prowizorka, czasem działa, czasem nie. (I w tym wypadku nie działa z tego co sprawdzałem). Chodzi o to, że jak podajesz kod w stringu, to żadne zmienne lokalne (zadeklarowane na poziomie funkcji) nie działają. Ani te, które są zadeklarowane po var, ani this, ani argumenty funkcji. Ten post edytował PrinceOfPersia 18.04.2013, 09:11:26 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
ależ to prowizorka, czasem działa, czasem nie. Zawsze działa, tylko tak jak mówiłem trzeba zwracać uwagę na zmiennne. żadne zmienne lokalne (zadeklarowane na poziomie funkcji) nie działają Więc użyj zmiennych globalnych |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 95 Dołączył: 20.12.2005 Skąd: N54,35° E18,63° (Gdańsk) Ostrzeżenie: (0%) ![]() ![]() |
Pozwoliłem sobie (IMG:style_emoticons/default/tongue.gif)
Chyba chodzi Tobie o coś takiego:
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
@bx4, testowałeś to? Bo tak na oko, to też gubi się kontekst this:
Cytat Więc użyj zmiennych globalnych Nie zawsze się da. Cytat Zawsze działa, tylko tak jak mówiłem trzeba zwracać uwagę na zmiennne. Wolę robić normalnie i nie musieć na nic zwracać uwagę. Poza tym jak robisz normalnie, to masz kolorowanie składni i inne bajery. I masz wszystkie zmienne w JS, możesz też łatwo dać do setTimeouta jakąś większą funkcję. Łatwiej wykrywać błędy. Generalnie same zalety nad hardkodowaniem stringa. Poza tym hardkodowanie stringa to rozwiązanie z eval, a eval is evil (IMG:style_emoticons/default/wink.gif) Ten post edytował PrinceOfPersia 23.04.2013, 09:37:53 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 95 Dołączył: 20.12.2005 Skąd: N54,35° E18,63° (Gdańsk) Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
no tak, robisz tam Slider.current, czyli powinno działać (IMG:style_emoticons/default/smile.gif)
(z this.current by raczej nie zadziało (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:32 |