2012-02-17 68 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