jQuery for循环动态值

Fre*_*nds 2 jquery for-loop

我遇到了以下循环的问题:

for (var i = 0; i < dataElements; ++i){
  d=document.createElement('div');
  $(d).addClass('overviewbit')
  .appendTo('.overview')
  .click(function(){
    id = i;
  });
}
Run Code Online (Sandbox Code Playgroud)

每个Div都将id设置为循环的最高值,但我应该是创建时得到的确切值.所以第一个div应该设置为1,第二个div应该设置为2,依此类推.我希望你能理解我的问题并帮助我找到解决方案.

Bla*_*ger 5

这是一个常见问题.当您创建click处理程序时,它设置idi- 变量,而不是i当时存储的值.

for循环完成任何的DIV的被点击之前,这样i等于从环路的所有点击处理终值,并因此所有的ids的设置为相同的值.

使用jQuery,您可以使用.data()存储来解决此问题:

for (var i=0; i<dataElements; ++i){
    d=document.createElement('div');
    $(d).addClass('overviewbit')
        .appendTo('.overview')
        .data('val',i)
        .click(function(){
                id = $(this).data('val'); 
            });
}
Run Code Online (Sandbox Code Playgroud)

但是,要以"正确"的方式执行操作,您将使用JavaScript闭包:

for (var i=0; i<dataElements; ++i){
    d=document.createElement('div');
    $(d).addClass('overviewbit')
        .appendTo('.overview')
        .data('val',i)
        .click((function(j){
                return function() { id = j; }
            })(i));
}
Run Code Online (Sandbox Code Playgroud)