我遇到了一个问题 - 我想在创建动态生成的表格的每个单元格时添加一个.onClick事件。javascript - 给表单中的每个单元格添加.onClick
cell.onclick = function(){
mouseClick(row_number,i, cell);
};
但是,它似乎只是将事件添加到每行中的最后一个单元格。这怎么可能?它以某种方式覆盖了以前的?以及如何使其工作?
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;
}
欢迎可怕的不方便世界封闭的;) –
'我有一个全局范围(据我所知 - 顺便说一句,这是不好的做法),'row_number'和'cell'的作用域是外部函数,所以它们对所有单元格都是一样的。你可以[修复它与闭包](http://stackoverflow.com/q/750486/4642212),但我强烈建议**事件代表团**而不是。 – Xufox
这个问题是这个问题的重复http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue 查看答案有一个可能的解决方案和javascripts臭名昭着的loop-closure问题的解释。 – juan8a