J'ai un problème - Je souhaite ajouter un événement .onClick à chaque cellule d'une table générée dynamiquement pendant que je le crée.javascript - donnant .onCliquez sur chaque cellule d'une table
cell.onclick = function(){
mouseClick(row_number,i, cell);
};
Cependant, il semble que l'événement est simplement ajouté à la dernière cellule de chaque ligne. Comment est-ce possible? Est-ce en quelque sorte écrasant les précédents? Et comment le faire fonctionner?
function drawRow(rowData, length, keys, row_number){
//rowData - object where the row data is stored, length-row length, keys - object with table keys stored, row_number - number of the row
var rowData=rowData;
var row = document.createElement("tr");
for(i=0; i<length; i++){
var cell = document.createElement("td");
console.log("Creating event for "+i+" .");
cell.onclick = function(){
mouseClick(row_number,i, cell);
};
var key = keys[i];
var cell_text = document.createTextNode(rowData[key]);
cell.appendChild(cell_text);
row.appendChild(cell);
}
return row;
}
Bienvenue dans le monde horriblement pratique des fermetures;) –
' J'ai une portée globale (pour autant que je sache - c'est une mauvaise pratique, en passant) et 'row_number' et' cell' sont étendus aux fonctions externes, donc ils seront les mêmes pour toutes les cellules. Vous pourriez [le réparer avec une fermeture] (http://stackoverflow.com/q/750486/4642212), mais je recommanderais fortement ** la délégation d'événement ** à la place. – Xufox
Cette question est une copie de celui-ci http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue Voir la réponse là pour une solution possible et une explication de javascripts infâme boucle de fermeture problème. – juan8a