Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Prosta pętla w jQ
opsa
post 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 smile.gif
Pozdrawiam
Go to the top of the page
+Quote Post
Crozin
post 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:
[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.

Ten post edytował Crozin 30.08.2012, 18:18:22
Go to the top of the page
+Quote Post
Arcadius
post 30.08.2012, 18:24:12
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 21.08.2012

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


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
Go to the top of the page
+Quote Post
opsa
post 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ź smile.gif
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 Wersja Lo-Fi Aktualny czas: 28.04.2024 - 04:08