2011-09-25 81 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