Passaggio dei valori a onclick

Se creo un sacco di elementi HTML usando un ciclo, come

for (i= 1; i < 100; i++) { var my_element = document.createElement ("td"); row.appendChild (my_element); my_element.onclick = function () {my_function (i)); } 

quindi quando si fa clic sull’elemento, il valore di i passato a my_function è sempre 100, indipendentemente da quale elemento numerico lo sta chiamando. Ho lavorato su questo usando

 my_element.id = "something"+i; my_element.onclick = function (e) {my_function (e.target.id)}; 

(Per Internet Explorer, l’ target deve essere srcElement , apparentemente.) Sono curioso di sapere se esiste un modo per creare la funzione senza dover aggiungere l’ID all’elemento come questo.

Il valore di i cambia ad ogni iterazione del ciclo. Hai bisogno di una chiusura per catturare il valore di i :

 (function(i) { my_element.onclick = function () {my_function (i)}; }(i)) 

Se si scrive una funzione che crea una funzione di gestione, è ansible utilizzare il nuovo ambito che consente di ottenere il numero desiderato. Per esempio:

 function BuildHandler (i) { return function () { alert(i); }; for (i= 1; i < 100; i++) { var my_element = document.createElement ("td"); row.appendChild (my_element); my_element.onclick = BuildHandler(i); } 

se fossi in te userò Jquery (o prototipo o qualsiasi altra struttura js disponibile)

su ogni elemento dovresti aggiungere attributi come myid per esempio in modo che quando lo fai con un clic puoi riviverlo.

 for(i=1; i ++ ; i<100){ var myelement = "" ; row.append(myelement); } .... $(document).ready(function(){ $('.myTD').click(function(){ var id = $(this).attr('myid'); my_function(id); }); }); 

Ho fatto questo trucco sulla mia app web 🙂