close
最近碰上要把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。
--
全站熱搜
留言列表