Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zdarzenia w pętli
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
slammer
Przedstawiam fragment kodu z mojego skryptu:
  1. for(i=0; i < 3; i++){
  2. for(j=0; j < 3; j++){
  3. document.getElementById(i+'_'+j).onmouseover = function() {alert(i)};
  4. }
  5. }


Zdawałoby się, że po wykonaniu takiego kodu powinienem uzyskać taki rezultat:
  1. <div id="0_0" onmouseover="alert(0)">
  2. <div id="0_1" onmouseover="alert(0)">
  3. <div id="0_2" onmouseover="alert(0)">
  4. <div id="1_0" onmouseover="alert(1)">
  5. <div id="1_1" onmouseover="alert(1)">
  6. <div id="1_2" onmouseover="alert(1)">
  7. <div id="2_0" onmouseover="alert(2)">
  8. <div id="2_1" onmouseover="alert(2)">
  9. <div id="2_2" onmouseover="alert(2)">


Jednak tak nie jest i w każdym elemencie mam alert(2) czyli ostatnią iteracją pętli "i"...

Wynika to pewnie z tego, że funkcja w rzeczywistości jest tworzona tylko w jednej kopii, a każdy element onmouseover odwołuje się do jej aktualnej i jedynej wersji czyli tak jakbym napisał:
  1. <div id="0_0" onmouseover="funkcja">
  2. <div id="0_1" onmouseover="funkcja">
  3. <div id="0_2" onmouseover="funkcja">
  4. ...


Może ktoś już miał podobny problem. Czy jest jakiś sposób, żeby to ująć w pętli i uzyskać oczekiwany efekt?
BaN
Kod
alert(this.id.substring(this.id.indexOf('_')+1))
slammer
dzięki wielkie

  1. alert(this.id.substring(this.id.indexOf('_')-1, this.id.indexOf('_')))


Pomogło
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.