onkeyup 関数を有効にしてコードをテストしました。
var n = 1;
function addRow(tableID,nroColumna) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
for(i=0;i<nroColumna;i++){
var cell = row.insertCell(i);
var element = document.createElement("input");
element.type = "text";
element.name = n+"0"+i;
element.size = "12";
element.id = n+"0"+i;
element.onkeyup = function(){alert(element.id);};
cell.appendChild(element);
}
n++;
}
そして、それはうまくいきました。ただし、関数への呼び出しごとに計算された最後の element.id を使用します...そのため、3 つのセルの 1 つの行を作成すると、セルに入力するたびに、入力したセルに関係なく「102」と警告されます。の。
これは、onkeyup 関数が動的であるためです。これは keyup アクションで呼び出されます - オブジェクトの作成時には設定されません。そのため、最初に渡したときの値ではなく、アクションの時点で存在するelement.id 値を使用します。それが理にかなっていることを願っています。
私は最近のプロジェクトでこの問題を抱えていました。1 つの解決策は、for ループの内部動作用に別の関数を作成することです。
var n = 1;
function createRow (n, i) {
var element = document.createElement("input");
element.type = "text";
element.name = n+"0"+i;
element.size = "12";
element.id = n+"0"+i;
element.onkeyup = function(){alert(element.id);};
return element;
}
function addRow(tableID,nroColumna) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
for(i=0;i<nroColumna;i++){
var cell = row.insertCell(i);
element = createRow(n, i);
cell.appendChild(element);
}
n++;
}
このコードは正しい element.id 値を警告します。
編集: onkeyup() 行を次のように変更できます。
element.onkeyup = function(){document.getElementById(element.id).value = document.getElementById(element.id).value.toUpperCase();};
そして、それはあなたが望むように動作するはずです。