最近碰上要把js陣列中的內容跑迴圈拿來使用,結果一直取到陣列中最後一個元素的內容。

本來以為是IE BUG,想不到要使用closure來解。

簡單來說就是再包一個function把迴圈的key或是value當作參數帶入使用,這樣這個值就不會被後面key的改變所影響。

參考自 http://blog.xuite.net/vexed/tech/33638749

--

需求:想要在按鈕brn click時alert出陣列a裏頭的所有元素。

原始code:

var a = [1,2,3,4,5];

for(var i=0; i<a.length; i++){
   $('#btn').click(function(e) {
      var url = a[i];
      alert(url);
  });
}

alert每次都是undefined。

檢查後發現,最後i變成6,超出陣列a的大小,所以當然都是undefined。

 

修正code:

var a = [1,2,3,4,5];

for(var i=0; i<a.length; i++){
   handler(i);
}

function handler(i) {
   $('#btn').click(function(e) {
      var url = a[i];
      alert(url);
   });
}

把執行內容再包一層function,然後把i帶入此function。

這樣就會正常alert 1~5。

 

--

arrow
arrow
    全站熱搜

    dizzy03 發表在 痞客邦 留言(0) 人氣()