Javascript JS/jQuery提醒其号码的div列表

Javascript JS/jQuery提醒其号码的div列表,javascript,jquery,Javascript,Jquery,我正在制作一个div列表,希望每个div都提醒自己的编号,但结果是我所有的div都提醒11 for(var i = 1; i <= 10; i++) { $('#chatlist').append( $("<div class='chatlist_cell'>" + i + "</div>").click( function() { alert(i) } ) ) } for(var i=1;i这是因为您没有通过闭包来保留i for

我正在制作一个div列表,希望每个div都提醒自己的编号,但结果是我所有的div都提醒11

for(var i = 1; i <= 10; i++) {
    $('#chatlist').append(
        $("<div class='chatlist_cell'>" + i + "</div>").click( function() { alert(i) } )
    )
}

for(var i=1;i这是因为您没有通过闭包来保留i

for (var i = 1; i <= 10; i++) {
  (function(index){
    $('#chatlist').append($("<div class='chatlist_cell'>" + index + "</div>").click(function() {
        alert(index)
    }))
  })(i);
}
$。每个(数组(10)、函数(索引){
$(“”+(索引+1)+“”)。附加到('body')。单击(函数(){
console.log(索引+1)
});
});

我建议避免不必要地在循环中生成函数。将生成器函数移出循环。这样做既更清晰,又避免创建和丢弃临时函数。(在这种情况下,
bind
将是一个清晰、简洁的解决方案。)Thanx!那么如果我调用外部函数,我需要相同的闭包包装器吗?它可以工作,只是想确保是否有更短的方法。这种包装方式对于(var I=1;I)来说是一种更详细的

 $.each(Array(10), function(index) {
  $("<div class='chatlist_cell'>" + (index + 1) + "</div>").appendTo('body').click(function() {
    console.log(index + 1)
  });
});