2012-02-17 43 views
0

我正在创建一个jQuery UI用cookies排序,以便在更新时保持状态。
下面的代码的重要组成部分:如何在javascript/jQuery中设置变量的永久值?

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);将有tipotipo2而不是tipo0或问题tipo1

我希望你明白我在说什么。如果没有,请告诉我!

但是,我怎样才能使这个有正确的tipo

+1

请留下[this](http://bonsaiden.github.com/JavaScript-Garden/#function.closures),即“loops”部分。 – pimvdb 2012-02-17 11:21:11

+0

回答,我会接受答案:) – 2012-02-17 11:30:43

回答

3

我链接的文章归结为只有一个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 

    ... 
    })(); 
} 
+0

谢谢!这正是我固定它的方式! – 2012-02-17 11:37:38