我正在创建一个可与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而不是tipo0tipo1

我希望你能理解我的意思。如果没有,那就告诉我!

但是,如何使它具有正确的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

    ...
  })();
}

07-24 09:45
查看更多