0

我正在遍历几个<textarea>元素并初始化一个所见即所得的编辑器。编码:

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

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

我在这里阅读了几篇“可变变量”帖子,但仍然无法弄清楚。

4

2 回答 2

2

这将起作用。您需要做的是定义一个i变量不变的新范围。

for( var i = 0; i <= 2; i++ ){
    (function(i) {
        $( '#textarea' + i ).wysihtml5({
            "events": {
                "change": function() {
                    console.log(i);
                }
            }
        });
    })(i);  
}
于 2013-11-12T13:21:41.963 回答
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);
}
于 2013-11-12T13:21:28.500 回答