私は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');
});