
お世話になります。
IDやクラスで括られた、特定の範囲のチェックボックスを一括操作したいと考えています。
チェックボックス一括チェックと検索すると多くの情報を拝見することが出来ますが、どれも全てのチェックボックスが対象で、”特定の範囲”を対象としたも情報を得ることが出来ません。御教示願えないでしょうか。
少し具体的にご説明すると、北海道・東北地方というグループにある一括チェックボックスをチェックすると、北海道・東北地方に属する、同県がチェックされ、関東地方にある一括を操作すると、関東地方に属する都県がチェックされるという具合です。(各都道府県のname属性は同じ)
以下ソースは、色々と試しているうちの1つです。
お忙しいなか恐縮ですがアドバイスのほど頂戴出来れば幸いです。
よろしくお願いいたします。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4 …
<script>
$(function() {
$('#category_all1').on('click', function() {
$('.category').prop('checked', this.checked);
});
$('.category').on('click', function() {
if ($('#categories1 :checked').length == $('#categories1 :input').length){
$('#category_all1').prop('checked', 'checked');
}else{
$('#category_all1').prop('checked', false);
}
});
$('#category_all2').on('click', function() {
$('.category').prop('checked', this.checked);
});
$('.category').on('click', function() {
if ($('#categories2 :checked').length == $('#categories2 :input').length){
$('#category_all2').prop('checked', 'checked');
}else{
$('#category_all2').prop('checked', false);
}
});
});
</script>
<input type="checkbox" id="category_all1" name="category_all1">
<label for="category_all1">北海道・東北地方</label>
<div id="categories1">
<input type="checkbox" name="category[]" id="category01" value="01" class="category">
<label for="category01">北海道</label>
<input type="checkbox" name="category[]" id="category02" value="02" class="category">
<label for="category02">青森</label>
<input type="checkbox" name="category[]" id="category03" value="03" class="category">
<label for="category03">秋田</label>
<input type="checkbox" name="category[]" id="category04" value="04" class="category">
<label for="category04">岩手</label>
<input type="checkbox" name="category[]" id="category05" value="05" class="category">
<label for="category05">宮城</label>
</div>
<input type="checkbox" id="category_all2" name="category_all2">
<label for="category_all2">関東地方</label>
<div id="categories2">
<input type="checkbox" name="category[]" id="category06" value="06" class="category">
<label for="category06">千葉</label>
<input type="checkbox" name="category[]" id="category07" value="07" class="category">
<label for="category07">埼玉</label>
<input type="checkbox" name="category[]" id="category08" value="08" class="category">
<label for="category08">東京</label>
<input type="checkbox" name="category[]" id="category09" value="09" class="category">
<label for="category09">神奈川</label>
<input type="checkbox" name="category[]" id="category10" value="10" class="category">
<label for="category10">茨城</label>
</div>
No.2ベストアンサー
- 回答日時:
No1です。
>チェックを外す動きを持たせるためにはどのようにしたらいいのでしょうか。
一括ボックスと同じ状態にすればいいってことでしょうか?
そちらのほうが処理内容としては単純になります。
「チェック状態か」というチェックを外して、一括ボックスと同じ状態にセットすればよいです。
document.addEventListener('click', e =>{
let
t = e.target,
m = t.id.match(/^category_all(\d+)$/);
if(t.nodeName != 'INPUT' || !m) return;
let
f = t.checked,
sel = '#categories' + m[1] + ' input[type="checkbox"]';
document.querySelectorAll(sel).forEach( el =>{ el.checked = f; });
});
fujillinさま
早々のお返事をありがとうございます!
セットごとにJS部分が増えていくのかと考えていましたが、少ないスクリプトで実装出来ることに頭が下がります。
期待通りの動きを得ることが出来ました。
1度目のJSと2どめのJSとで見比べながら、理解を深めたいと思います。
ありがとうございました!
No.1
- 回答日時:
こんばんは
規則性に関する説明がないので、勝手に以下のように解釈しました。
・「一括チェックボックス」のIDは、必ず「category_all##」形式となっている
(##は正の整数値)
・対応するグループは、IDが「categories##」の要素内の<input tyep="checkbox">全て
(##は一括チェックボックスのNoと同一)
・「一括ボックスをチェックした時」だけ、対応するinputをチェック状態にする
(チェックを外した時は何もしない)
…という条件でよいのであれば、
document.addEventListener('click', e =>{
let sel, t = e.target, m = t.id.match(/^category_all(\d+)$/);
if(t.nodeName != 'INPUT' || !m || !t.checked) return;
sel = '#categories' + m[1] + ' input[type="checkbox"]';
document.querySelectorAll(sel).forEach( el =>{ el.checked = 'cheked'; });
});
※ 上記のスクリプトだけであれば、jQueryは不要です。
※ 前記の条件だけを利用していますので、他のIDやnameは無くても動作します。
※ 条件を満たす組み合わせであれば、文章中に何セットあっても動作します。
fujillinさま
おやすみのところ、ご親切な回答をありがとうございます。
描いている動作を実現出来て感謝です。
しかも短いJSで動くので尚更。
感激です。
>規則性に関する説明がないので
恐れ入ります。囲んだID単位で動かせれば他は何とかできれば・・・そんな気持ちでいたので特に規則は記載しませんでした。
ただ、申し訳ありませんが、チェックを外す動きを持たせるためにはどのようにしたらいいのでしょうか。
お願いばかりで恐縮ですが、今一度、ご指導いただければ幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクリプト内でチェックボック...
-
JSP内で可変するチェックボック...
-
クリアボタンの動作について
-
複数あるチェックボックスから...
-
JQuery Mobileでチェックボック...
-
サイト内の物件を複数の検索条...
-
ボタン無しでフォーム内容送信
-
return trueとreturn falseの用...
-
ラジオボタンにタブインデック...
-
selectメニューのselectedの位...
-
プルダウン 項目が多いので先頭...
-
<input>の選択肢をプルダウンメ...
-
JAVASCRIPT
-
slickのレスポンシブ > center...
-
ブラウザの戻るボタンを押した...
-
Webブラウザにてページのりロー...
-
Selectボックスの幅を自動で広...
-
クリックごとに文字色が交互に...
-
クリックされた罫表セルの行番...
-
javascript による POST 送信時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jsp/Java】チェックボックス...
-
背景色を変えて未入力チェック...
-
チェックが入っていなかったら...
-
オフになっているチェックボッ...
-
チェックボックスとラジオボタ...
-
チェックボックスを使って条件検索
-
確認ページからフォームページ...
-
jquery複数のcheckboxの値について
-
チェックボックスのON/OFFでVal...
-
テキストフィードを「無効にす...
-
チェックボックスのON/OFFに応...
-
特定のID(またはクラス)で括ら...
-
削除確認のアラートを出したい
-
フォームの制御について
-
チェックボックスとテキストの値
-
checkboxをクリックしてリロー...
-
チェックした数でメッセージを...
-
localStorageでのcheckbox制御
-
チェックボックスの値
-
配列のチェックボックスをjavas...
おすすめ情報