Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prosta pętla w jQ
opsa
post
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 (IMG:style_emoticons/default/smile.gif)
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
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

Posty w temacie


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

 



RSS Aktualny czas: 5.10.2025 - 11:15