2

大きなテーブルの各trを作成して、クリック時にtdの1つ内のdivを切り替えようとしています。これが私が行ったことです。

for( i = 2 ; i < trLen; i++ ){
   var id = $("td.idout", "tr:eq(" + i + ")").text();
   $("tr:has(div#" + id + ")").click(function(){
       $("div #"+ id).toggle();
   });
}

私は、各divのIDをエントリ(var id上記で参照されている選択で出力される)と同じにしています。私はそれぞれの選択をテストしました、そしてそれらはすべて完璧です。ロジックが機能しないため、ロジックに問題があるはずです。何もしません。

4

2 に答える 2

2

div#記号の間に冗長なスペースがあり、特定のdivを選択する代わりに、 div内のid要素を選択します。id

変更してみてください:

$("div #"+ id).toggle();

と:

$("div#"+ id).toggle(); // or $("#"+ id).toggle()
于 2012-07-22T02:53:20.353 に答える
0

varキーワードは、予想していたブロックスコープではなく、関数スコープの変数を宣言します。したがって、ループidの各反復で共有されるのは1つだけです。forまた、click関数はループの終了後に呼び出されるidため、このセレクターのループからの最後の値が常にあります。

...function(){
    $("div#"+ id).toggle();
}...

これは、即時呼び出し関数を使用して修正できます。この関数は、反復ごとに変数を囲みます。

for( i = 2 ; i < trLen; i++ ) {
    (function () {
        var id = $("td.idout", "tr:eq(" + i + ")").text();
        ...
    })();
}

または、最終的には、代わりにletキーワードを使用できるようになります。

for( i = 2 ; i < trLen; i++ ) {
    let id = $("td.idout", "tr:eq(" + i + ")").text();
    ...
}
于 2012-07-22T03:21:37.683 に答える