Sicuramente è una stupidaggine ma mi sta facendo impazzire.
Ho una funzione F che viene chiamata N volte. Prima di questa funzione è dichiarata una variabile globale che viene incrementata ogni volta che si chiama la funzione F.
Dentro la funzione F si crea dinamicamente una tabella html con dei pulsanti e dei link attraverso i metodi document.createElement. uno di questi elementi è un pulsante a cui associo un evento OnClick che richiama una funzione G. Questa funzione G ha come parametro la variabile globale NUMERO. Ecco la sintesi del codice:
La funzione F crea correttamente gli N elementi, ogni volta incrementando la variabile NUMERO. Il problema è che quando clicco sull'elemento creato (cioè eseguo l'onclick e quindi eseguo la funzione G) il valore di NUMERO non è quello che aveva mentre veniva invocata la funzione, ma il valore corrente, cioè il valore più alto.Codice PHP:function g(n) { ... }
var numero=1;
function f()
{
...
var link=document.createElement("A");
link.setAttribute('href','javascript:void(0);');
link.onclick = function() { g(numero); }
link.appendChild(img);
...
numero++;
}
Mi spiego:
1) NUMERO = 1 -> eseguo F -> genero un onclick che richiama G(numero)
2) NUMERO = 2 -> eseguo F -> genero un onclick che richiama G(numero)
3) NUMERO = 3 -> eseguo F -> genero un onclick che richiama G(numero)
io mi aspetto di trovarmi 3 eventi onclick così
elemento 1: onclick="g(1);"
elemento 2: onclick="g(2);"
elemento 3: onclick="g(3);"
invece mi trovo tre eventi così
elemento 1: onclick="g(numero);"
elemento 2: onclick="g(numero);"
elemento 3: onclick="g(numero);"
con il risultato che verrà istanziato sempre il valore attuale di NUMERO, cioè 3:
elemento 1: onclick="g(numero);" -> invoca g(3)
elemento 2: onclick="g(numero);" -> invoca g(3)
elemento 3: onclick="g(numero);" -> invoca g(3)
Quindi: come faccio nella funzione F a scrivere g(x) dove x è il valore attuale di NUMERO, invece che scrivere g(numero)?

Rispondi quotando