之前这么写的
for(var i=0;i<length;i++){
document.getElementsByName("primaryKey")[i].checked=false;
document.getElementsByName("primaryKey")[i].onclick=function (){
changeStatus(i);
}
}
function changeStatus(i){
var tzxz = grid_show.getCellValue(i,tabTi.rows[0].cells.length-2);
if(tzxz==1){
document.getElementById("deleteButton").disabled="false";
}else{
document.getElementById("deleteButton").disabled="true";
}
}
可是这个changeStatus得到的i一直是循环以后的i的值。
后经过群里朋友花心小萝卜指点,使用下面的方法可以成功拿到。
for(var i=0;i<length;i++){
(function(i){
document.getElementsByName("primaryKey")[i].checked=false;
document.getElementsByName("primaryKey")[i].onclick=function (){
changeStatus(i);
}
})(i);
}
function changeStatus(i){
var tzxz = grid_show.getCellValue(i,tabTi.rows[0].cells.length-2);
if(tzxz==1){
document.getElementById("deleteButton").disabled="false";
}else{
document.getElementById("deleteButton").disabled="true";
}
}
本文介绍了一种在JavaScript中处理循环内函数闭包问题的有效方法,通过立即执行函数表达式(IFE)确保每次循环都能正确捕获当前的变量值。

被折叠的 条评论
为什么被折叠?



