Prosta pętla w jQ |
Prosta pętla w jQ |
30.08.2012, 17:57:52
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.05.2012 Skąd: krk Ostrzeżenie: (0%) |
Witam,
od jakiegoś czasu staram się opanować pisanie w jQuery, stąd też ogromna prośba do Was. Zastanawiam się, jaką postać będzie mieć skrypt, który po naciśnięciu przycisku #button, pokaże powiedzmy czterokrotnie w pętli jakiś alert w odstępie dwóch sekund. Brzmi prosto, natomiast mój kod: Kod $("#button").click(function(){ for(j=0; j<4; j++) { setTimeout(function(){ alert(j); },2000); } }); owszem czeka, ale tylko za pierwszym razem (a ma być za każdym pokazaniem alertu), natomiast sam alert pokazuje jedynie cztery razy czwórkę. Zwracam się z prośbą o pomoc w rozwiązaniu do Was Pozdrawiam |
|
|
30.08.2012, 18:17:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
1. To pytanie o podstawy JS bez żadnego związku z jQuery.
2. Ta pętla wykona Ci się właściwie natychmiast, za każdym razem ustawiając wywołanie funkcji na za 2 sekundy, możesz: 2.1. Ustawić by funkcja wykonywała się po 2, 4, 6 i 8 sekundach. 2.2. Definiować kolejne wywołanie na końcu poprzedniego. 2.3. Skorzystać z setInterval, a po czwartym wykonaniu przerwać dalsze przy pomocy clearInterval. 3. Wyświetla Ci się 4 za każdym razem, ponieważ cały czas operujesz na tej samej zmiennej, a ta przecież po wykonaniu pętli ma wartość 3. Musisz zadbać o to by kod funkcji z setTimeout operował już w nowym kontekście/zasięgu. W JavaScripcie zasięg jest definiowany przez funkcję, tak więc możesz skorzystać z domknięcia, które zostanie natychmiast wykonane:
PS. Formatuj swój kod. Ten post edytował Crozin 30.08.2012, 18:18:22 |
|
|
30.08.2012, 18:24:12
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 21.08.2012 Ostrzeżenie: (10%) |
Znalazłem inne rozwiązanie dzieki koledze Erix
Nie wykorzystuje on pętli, ale rozwiąże twój problem, mój też rozwiązał Przykład rozwiązania problemu |
|
|
30.08.2012, 18:38:14
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.05.2012 Skąd: krk Ostrzeżenie: (0%) |
Dzięki Wam serdecznie.. nie sądziłam, że te setTimeouty rzeczywiście startują wszystkie naraz.
Kod pomógł, dlatego ogromny ukłon w stronę Crozina, aczkolwiek bardzo spodobała mi sie f-kcja setInterval. Dzięki jeszcze raz za bardzo szybką odpowiedź |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 04:08 |