私は問題があります - 私はそれを作成中に動的に生成されたテーブルの各セルに.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 javascriptの悪名高いループクロージャの問題の可能な解決策と説明については、そこに答えを見てください。 – juan8a