如何在javascript / jQuery中设置变量的永久值?

时间:2012-02-17 11:18:27

标签: javascript jquery jquery-ui variables jquery-ui-sortable

我正在使用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

1 个答案:

答案 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

    ...
  })();
}