我正在使用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
{1}}或tipo1
。
我希望你明白我在说什么。如果没有,请告诉我!
但是,我怎样才能使它具有正确的tipo
?
答案 0 :(得分:3)
我链接的文章归结为只有一个tipo
,因为该变量存在于同一范围内。 for
循环不会为每次迭代创建新的范围。
您需要在新范围内冻结变量,这只能在JavaScript中使用 functions 。我还建议对所有变量使用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
...
})();
}