2011-03-04 12 views
0

私は閉鎖(または、その欠如)に関連しているかもしれない愚直している。jQuery .append()はforループ内から呼び出されます。 (閉鎖の問題?)

ここで私が使用しているjQueryの:

function appendToWrapper(wrapper, newNode, loop, version){ 
    newNode 
    .text(loop+version); 
    wrapper 
    .append(newNode); 
} 

var template = $("<div></div>"); 

for(i=0;i<10;i++){ 
    appendToWrapper($('#wrapper'), template, i, 'a'); 
    appendToWrapper($('#wrapper'), template, i, 'b'); 
} 

私は何を作るにしたいことは、このような出力です:

0a 
0b 
1a 
1b 
2a 
... 
9b 

しかし、これは私がで終わるものですが、

9b 

これは閉鎖の問題だと思いますか?これを解決するための方向性についてのヒントは? (私はまだクロージャーの周りに頭を包み込んでいる)。

答えて

3

繰り返しごとにdivを作成する必要があります。次のようにあなたのコードを変更し :

function appendToWrapper(wrapper, newNode, loop, version){ 
    newNode 
    .text(loop+version); 
    wrapper 
    .append(newNode); 
} 

for(i=0;i<10;i++){ 
    var template = $("<div></div>"); 
    appendToWrapper($('#wrapper'), template, i, 'a'); 
    appendToWrapper($('#wrapper'), template, i, 'b'); 
} 

例@作業:http://jsfiddle.net/eMxBV/

+0

「をDOH!それだった!ありがとうございました! –

+0

これは簡単な点であり、DAは既にそれを修正していました。しかし、DAが要求するのとまったく同じ出力を得るには、コードは次のようにする必要があります。 for(i = 0; i <10; i ++){ var template = $( "

"); appendToWrapper($( '#wrapper')、テンプレート、i、 'a'); template = $( "
"); appendToWrapper($( '#wrapper')、テンプレート、i、 'b'); } \t 「b」のテンプレートをもう一度再初期化します。 – Krishna

関連する問題