【问题标题】:Callbacks created in $.each fn and with a for loop behave differently?在 $.each fn 和 for 循环中创建的回调行为不同?
【发布时间】:2013-03-07 14:17:41
【问题描述】:

全部 我做了一些看起来像这样的测试代码。

var selects = [$('#elem1'), $('#elem2'), $('#elem3')];

$.each(selects, function(item){
    selects[item].bind('click', function(){
        console.log("each function : " + item);
    });
});

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];
    elem.bind('click', function(e){
        console.log("for loop : " + i);
    });
}

我做了三个按钮来绑定事件。并测试

如果我单击名称为“elem1”的按钮,结果是:

console $
each function : 0
for loop : 3

如果我单击名称为“elem2”的按钮,结果是:

console $
each function : 1
for loop : 3

两个循环示例之间发生了什么?请告诉我。

谢谢你,祝你有美好的一天。

【问题讨论】:

标签: jquery for-loop each


【解决方案1】:

i 指的是计数器变量本身,而不是它的值。您必须按值传递它:

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];

    (function(i) {
        elem.bind('click', function(e) {
            console.log("for loop : " + i);
        });
    })(i);
}

在匿名函数中对i 进行阴影处理。

【讨论】:

  • 添加 $.fn.each 为每次迭代创建一个新的执行上下文以获得完整的答案。
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多