当我点击td案例时,请说明为什么参数传输错误了!
<!DOCTYPE html>
<html>
<body>
<table border=1>
<tr>
<td id="i_0">i_0</td>
<td id="i_1">i_1</td>
<td id="i_2">i_2</td>
<td id="i_3">i_3</td>
<td id="i_4">i_4</td>
<td id="i_5">i_5</td>
</tr>
</table>
<script>
for (var i = 0; i < 6 ; i++) {
oc = document.getElementById("i_" + i);
oc.onclick = function() { montre(oc.id , "t_" + i); };
}
function montre(bloc,item) {
alert(bloc + " | " + item);
}
</script>
</body>
</html>
在警告弹出窗口中,我正在等待&#34; i_0 | T_0&#34;或&#34; i_1 | T_1&#34;或者...我总是&#34; i_5 | t_6&#34;,为什么?
我的错误在哪里?
答案 0 :(得分:0)
试试这个
function onClick(oc, index) {
return function() {
montre(oc.id , "t_" + i);
}
}
for (var i = 0; i < 6 ; i++)
{
oc = document.getElementById("i_" + i);
oc.onclick = onClick(oc, i);
}
变量oc和i在循环的每次迭代中都被更改。一旦循环结束,它就等于它在循环的最后一次迭代中的最后一个值。每个单击事件共享相同的变量,因此在一个位置更改它会更改所有单击事件句柄。我建议的修复程序为每个单击事件处理程序创建一个新的局部变量。