Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosta pętla w jQ
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
opsa
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 smile.gif
Pozdrawiam
Crozin
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:
[JAVASCRIPT] pobierz, plaintext
  1. for(j = 1; j <= 4; j++) {
  2. (function(j) {
  3. setTimeout(function(){
  4. alert(j);
  5. }, j * 2000);
  6. })(j);
  7. }
[JAVASCRIPT] pobierz, plaintext


PS. Formatuj swój kod.
Arcadius
Znalazłem inne rozwiązanie dzieki koledze Erix

Nie wykorzystuje on pętli, ale rozwiąże twój problem, mój też rozwiązał smile.gif


Przykład rozwiązania problemu
opsa
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ź smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.