删除项目,编制索引问题......

时间:2011-09-25 14:57:03

标签: javascript

for (var i = 0; i < max; i++) {
   deleteButton[i].addEventListener('click', function (e) {
                    AddPatientVitalsModel.globalData.splice(i, 1);
    });
}

当我点击一个按钮时,会添加一个新表...我在表中更改了一些信息并再次添加另一个表...我删除了这个表...但是数组值确实删除了第一个索引

i 的值始终为零,它会删除数组中的第一项。如何确保每个表具有不同的ID。

对于每次点击,我觉得我的价值总是从零开始......

2 个答案:

答案 0 :(得分:4)

你在每个循环中覆盖i的值。您可以使用匿名函数按值传递变量:

for (var i = 0; i < max; i++) {
    (function(i){ //i is now defined within the scope of this anonymous function
        deleteButton[i].addEventListener('click', function (e) {
            AddPatientVitalsModel.globalData.splice(i, 1);
        }, true);
    })(i); //Pass i to the anonymous function
}

请注意,i在匿名函数中可以有不同的名称,但没有区别。

另一个通知:将三个参数传递给addEventListener,因为如果省略第三个参数,很多浏览器都会抛出错误。

答案 1 :(得分:1)

因为 i 范围是在事件之外。你需要从变量e得到索引,或者可以使用这段代码:

for (var i = 0; i < max; i++) {
   var ii = i;
   deleteButton[i].addEventListener('click', function (e) {
                    AddPatientVitalsModel.globalData.splice(ii, 1);
    });
}

但我不确定它是否适用于javascript。