变量值在循环内不可预测地变化

时间:2012-11-19 11:13:36

标签: javascript jquery closures

我的javascript循环无法正常工作。我只得到$i的最终值。

$(function() {
    var $count = $('#count').val();
    for (var $i = 1; $i < $count; $i++) {
        var btnRemove = $('#removeImage' + $i);
        var profilepictureid = $('#profilePitcureID' + $i).val();
        btnRemove.click(function() {
            alert($i);
        });
    }
});​

1 个答案:

答案 0 :(得分:3)

当您的click事件处理程序执行时,$i已达到其最终值($count - 1)。您需要在循环的每次迭代中捕获$i的值。你可以通过在每次迭代中引入一个“关闭”$i值的闭包来实现这一点:

for(var $i=1; $i<$count; $i++) {
    var btnRemove=$('#removeImage'+$i); 
    var profilepictureid = $('#profilePitcureID'+$i).val();

    (function ($i) {
        btnRemove.click(function(){
            alert($i);
        });
    }($i));
}