循环创建元素的值总是5

时间:2013-02-26 12:08:54

标签: javascript jquery html

有人可以告诉我为什么当我点击生成的名单(myhand)旁边创建的[s] href时,它总是说选择而我是5?

var printDD = function(myhand, mydiv){
    var dtext = "";
    for(var i = 0;  i < myhand.length; i++){
        dtext += '<a href="#" id="dd'+i+'">[s]</a>' + myhand[i] + ', ';
    }

    mydiv.html(dtext);

    for(var i = 0;  i < myhand.length; i++){
        $('#dd'+i).click(function(){
        selection = i;
        console.log("sel: " + selection + " i: " + i);
        });
    }
}

2 个答案:

答案 0 :(得分:1)

您想看看JavaScript closure inside loops – simple practical example。正如该问题的答案所示,您可以创建一个函数来返回一个函数,或者您可以在for循环中使用内联函数调用,如下所示:

for(var i = 0;  i < myhand.length; i++) {
    $('#dd'+i).click((function(x) {
        return function () {
            selection = x;
            console.log("sel: " + selection + " x: " + x);
        }
    }(i)));
}

答案 1 :(得分:0)

因为i的值是在运行点击处理程序时确定的。所以它总是具有myhand.length - 1的值,这是i - 循环之后离开for的状态。