Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne wstawianie onclick
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
tommyexlee
Witam,
Mam problem z dynamicznym wstawianiem onclick.

HTML:
  1. <button onclick="klik();">Klik</button>
  2. <div class="asd">
  3. <div class="akodp_1">
  4. Klik1
  5. </div>
  6. <div class="akodp_1">
  7. Klik2
  8. </div>
  9. <div class="akodp_1">
  10. Klik3
  11. </div>
  12. </div>


java script:

[JAVASCRIPT] pobierz, plaintext
  1. function klik(){
  2. alert('włączono klik'); // alert 1
  3. divs = document.getElementsByClassName('akodp_1');
  4. alert(divs.length); // alert 2
  5. for(var i=0;i<divs.length;i++) {
  6. alert(i); // alert3
  7. divs[i].onclick=function () {alert('cos' + i);}
  8. }
  9. }
[JAVASCRIPT] pobierz, plaintext

Wstawiłem wszystko tu: http://jsfiddle.net/854Vc/2/

alert 1 pokazuje, że klik działa
alert 2 pokazuje 3 - znaczy że wykrywa 3 divy
alert 3 pokazuje 0, 1, 2 - znaczy każdy z divów jest obsługiwany osobno

Dlaczego w takim razie po kliknięciu na każdy z divów pojawia się alert: "coś3", a nie "cos0", "cos1", "cos2"?

Dziękuję z góry za pomoc.

Pozdrawiam,
Tomek
markuz
Po kliknięciu uruchamiasz pętle (która wykona się zapewne w kilka ms). Po czym zmienna i przymuje wartość 3. Przy kliknięciu w któregokolwiek div-a wyświetlasz i.
PS. u siebie korzystaj z console.log (Jeżeli tego nie robisz).

Spróbuj tak: http://jsfiddle.net/854Vc/3/
trueblue
Dodaj:
i++;
po pętli, to naprowadzi Cię na przyczynę.
A tu masz rozwiązanie: http://stackoverflow.com/questions/3495679...t-onclick-event
tommyexlee
Dzięki wielkie za wskazanie rozwiązania. Przebudowałem kod i wszystko działa. Jestem zaskoczony, że zmienna "i" pozostała dalej widoczna po pętli.

Skąd bierze się te (); na końcu? Z czego to wynika?

Pozdrawiam,
Tomek

Dobra dzięki, ale już znalazłem. Szukałem pod hasłem 'closure'. Pozdrawiam
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.