我在激活 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 个单元格时,每次我输入一个单元格时,无论我输入哪个单元格,它都会提醒“102”在。
这是因为 onkeyup 函数是动态的。它在 keyup 操作上调用 - 在创建对象时未设置。所以它使用的是在操作时存在的 element.id 值,而不是你第一次传递它时的值。我希望这是有道理的。
我自己在最近的一个项目中遇到了这个问题。一种解决方案是为 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();};
它应该按照您的意愿工作。