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

当我点击一个按钮,添加一个新的表...我更改表中的一些信息,然后再添加另一个表...我删除该表...但数组值确实会删除第一个索引。删除一个项目,索引的问题...

的值总是为零,并且它在阵列中删除的第一项。我如何确保每个表具有不同的ID。

为每次点击我觉得这样我看重总是从零开始....

回答

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,因为如果省略了第三个参数许多浏览器将抛出一个错误。

+0

它是如何将工作,我compling我的应用程序..我将正确的索引将被传递 –

+0

*“它怎么会工作” *?我只在你的代码中增加了两行。阅读答案+ JavaScript评论。如果还不清楚,可以问一个更具体的问题。 –

+0

但这是另一回事。如果从数组中间删除项目,按钮索引将与数组索引不同。 – neworld

1

因为范围之外的事件。您需要从变量e获得索引,或者可以使用此代码:

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

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

+0

@newworld:但会的二值保持对每次点击改变,我的问题是,它总是会删除阵列 –

+2

您的解决方案中的第一项不起作用,因为没有新的范围。您将需要创建一个函数,使变量“冻结”,因为只有函数定义一个新的范围。 – pimvdb