2012-02-17 25 views
0

更新時に状態を維持するために、クッキーで並べ替え可能なjqueryを作成しています。
は、ここでは、コードの重要な部分です: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);の全てがtipo2の代わりに、tipo0またはとしてtipoを持つことになりました問題tipo1

私が言っていることを理解していただければ幸いです。そうでなければ、教えてください!

しかし、どうすればいいですか?tipo

+1

「this」(http://bonsaiden.github.com/JavaScript-Garden/#function.closures)の「ループ」の部分を参考にしてください。 – pimvdb

+0

答えて、私は答えを受け入れるでしょう:) –

答えて

3

私がリンクしている記事は、変数が同じスコープに存在するため、tipoが1つしかないということです。 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

ありがとう!それはまさに私がそれを修正した方法でした! –

関連する問題