给定可变变量错误时如何访问正确的变量

时间:2013-11-12 13:18:44

标签: javascript jquery

我正在遍历几个<textarea>元素并初始化一个wysiwig编辑器。 代码:

for( var i = 0; i <= 2; i++ ){
    $( '#textarea' + i ).wysihtml5({
        "events": {
            "change": function() {
                console.log( i ); // Can't access i here
             }
        }
    });
}

但我无法访问i事件函数中的for循环变量change。为什么会这样,我该如何解决?

我在这里阅读了几个“可变变量”帖子,但仍然无法弄明白。

2 个答案:

答案 0 :(得分:2)

这会奏效。您需要做的是定义i变量不变的新范围。

for( var i = 0; i <= 2; i++ ){
    (function(i) {
        $( '#textarea' + i ).wysihtml5({
            "events": {
                "change": function() {
                    console.log(i);
                }
            }
        });
    })(i);  
}

答案 1 :(得分:1)

这可能是因为在循环结束后更改是异步执行的。要在另一个范围内获取i的副本,请执行以下操作:

var doStuff = function(i){
    $( '#textarea' + i ).wysihtml5({
        "events": {
            "change": function() {
                console.log( i ); // Can't access i here
             }
        }
    });
}

for( var i = 0; i <= 2; i++ ){
    doStuff(i);
}