我正在创建一个可与cookie进行排序的jquery ui,以在更新时保持状态。
这是代码的重要部分:
for(i=0; i<counter; i++) {
var connect = "";
var count = 0;
var tipo = "tipo" + i;
for(j=0; j<counter; j++) {
if(j != i) {
if(count > 0) {
connect = connect + ",.tipo" + j;
}
else {
connect = ".tipo" + j;
count++;
}
}
}
$( "." + tipo ).sortable({
connectWith: connect,
dropOnEmpty: "true",
opacity: 0.8
});
$(".tipo" + i).sortable({
activate: function(event, ui) {
var order = $( "." + tipo ).sortable('toArray');
createCookie(tipo, order, 1);
},
update: function(event, ui) {
var order = $( "." + tipo ).sortable('toArray');
createCookie(tipo, order, 1);
},
receive: function(event, ui) {
var order = $( "." + tipo ).sortable('toArray');
createCookie(tipo, order, 1);
}
});
}
我遇到的问题是,在上一条语句中
var tipo = "tipo" + i;
将变为tipo2
,而所有以前的createCookie(tipo, order, 1);
都将tipo
作为tipo2
而不是tipo0
或tipo1
。我希望你能理解我的意思。如果没有,那就告诉我!
但是,如何使它具有正确的
tipo
? 最佳答案
我链接到的文章归结为,只有一个tipo
,因为变量存在于同一作用域中。 for
循环不会为每次迭代创建新的作用域。
您需要将变量冻结在新的范围内,这仅适用于JavaScript中的函数。我还建议将var
用于所有变量(即所有循环计数器)。
for(var i = 0; i < counter; i++) {
(function() {
var tipo = ...;
// `tipo` is not changed by a second iteration because this is a new scope
...
})();
}