我正在遍历几个<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
。为什么会这样,我该如何解决?
我在这里阅读了几个“可变变量”帖子,但仍然无法弄明白。
答案 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);
}