2010-12-14 9 views
2

私はこのコードを自分のウェブサイトに持ち、画像の数を数え、ユーザーが希望するカテゴリをクリックするたびにリストを出力します。Javascript accidental closure

問題は、私のイメージカウンタ変数(noIMG)は、関数が呼び出されるたびにそれ自身をクリアしないということです。私は関数の最後にリセット(noIMG)を追加しようとしましたが、それは悪い考えのように思えました。

私はいくつかの研究を行い、閉鎖に関する記事を見つけました。それを修正するために数多くのメソッドを試した後も、私のコードはまだ私が望むように動作していません。


function thumbCounter(){ 

    var noIMG = $(".artwork img").size()+1; 

     for (var count = 1; count < noIMG; count++){ 
      if (count == 1){ 
       $('#list_here').append('<li class="active">' +count+ '</li>'); 
      } else{ 
       $('#list_here').append('<li>' +count+ '</li>');  
      } 
     } 
}; 
+0

あなたはそれを呼び出すにはどうすればよいですか? – BoltClock

+0

「自分自身をクリアする」とはどういう意味ですか? 'count'はあなたのカウンター変数です。これは、関数を呼び出すたびに1から再起動する変数です。 'noIMG'は、イメージを追加するためにDOMを間に変更しない限り、関数を呼び出すたびに同じであると予想されます。しかし、おそらくこれはあなたが求めているものではありませんか? –

+0

異なる 'noIMG'変数(またはウィンドウプロパティ)をシャドーイングしている可能性があります。このコードでは、文脈からは、偶然であろうとなかろうと、閉鎖はありませんが、文脈上、まったく別の話かもしれません。 –

答えて

0

あなたがリストに関数が呼び出されるたびにクリアしたい意味ならば、このようにそれを実行します。

function thumbCounter() { 
    var noIMG = $(".artwork img").size() + 1; 
    var myList = $('#list_here'); // reference to list 

    myList.html(""); // clear the contents 
    for (var count = 1; count < noIMG; count++) { 
     if (count == 1) { 
      myList.append('<li class="active">' +count+ '</li>'); 
     } else { 
      myList.append('<li>' +count+ '</li>');  
     } 
    } 
}; 
+0

$( "#selector ul")を使用しています。リストをクリアする。つまり、関数が呼び出されるたびに0にリセットする必要はありません。なんらかの理由で、noIMGは最後に取得した番号と関数が呼び出されるたびに保存します。既存の番号の上に追加します。最初に呼び出されたときに正しい量、つまり6が表示されます。 2回目は12になるなど... –

+0

これはあなたが探していたものではありませんでした。 $( "。artwork img")と一致するものを追加するなど、DOMに対して何かをやっていないと確信していますか? jsfiddleやjsbinの完全な例を載せてください。それは事を説明するかもしれません。 – dyve

+0

アドバイスをいただきありがとうございます。それは実際には同様のセレクターと混在していたようです。 –