2

私はjs/jqueryにかなり慣れていません。check$ ($ は連番) の ID を持つ各チェックボックスについて、同じ check$ を (ただしクラスとして) 使用する周囲のスパンのクラス「同意」を切り替えたいと考えています。これは異なる場合があるため、一致するチェックボックスのリストをハードコードする必要はありません。

これが私のコードです。この関数は期待どおりに機能します。

agree = function (checkbox, span) {
    $(checkbox).change(function(){
       $(span).toggleClass('agree');
   });      
};

これは私が上記の関数に渡そうとしているものですが、うまくいきません:

$(function() {
    var elemid = 'check',
    checks     = Array($('[id^='+elemid+']').length);
    console.log(checks);
  for (i=0; i < checks; i++) {
    agree('#'+elemid+checks[i], "."+elemid+checks[i]);
    }
});

console.log(checks) は[undefined × 4]を返します。要素数は正しいのですが、なぜ未定義なのか、それが重要なのかどうかはわかりません。

次のコードは期待どおりに機能しますが、私が言うように、一致するすべての要素を指定する必要はありません。

$(function() {
    var checks = ["check1", "check2", "check3", "check4"];
    for (i=0; i < checks.length; i++) {
        agree('#'+checks[i], "."+checks[i]);
        }
});

ありがとう。

編集: Jackのおかげで、最も単純な方法を見落としていました。すべてのチェックボックスとスパンに同じクラスを追加し、これで問題を解決しました:

$('input.check').change(function(){
    $(this).closest('span.check').toggleClass('agree');
});
4

2 に答える 2

1

何かが完全に欠けている可能性がありますが、各チェックボックスに変更ハンドラーを添付しようとしているだけだと確信しています。この場合、それらすべてに同じクラスを与えることができます。また、スパンのhtml構造も推測しています。

参考のため:

http://api.jquery.com/closest/

http://docs.jquery.com/Tutorials:How_jQuery_Works

$('.yourcheckboxclass').change(function(){ //grab all elements with this class and attach this change handler
   $(this).closest('span').toggleClass('agree'); 
});
于 2012-07-13T13:59:01.790 に答える
0

配列が未定義の値でいっぱいになる理由は、jQuery オブジェクト内のアイテムの数を取得しているだけで、そのサイズの配列を作成しているためです。jQuery オブジェクトは破棄されます。

代わりに jQuery オブジェクトを変数に入れます。

var elemid = 'check', checks = $('[id^='+elemid+']');

checks.each(function(){
  agree(this, "."+elemid+checks[i]);
});
于 2012-07-13T14:10:19.000 に答える