🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1473閲覧

checkboxのnameが配列の場合、特定のcheckboxのチェックを外したい

Discord

総合スコア51

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/10/25 06:36

編集2019/10/25 06:46

下記のようなチェックボックスが並んでいます。

html

1<input type="checkbox" name="hoge1[sample]" id="hoge1[sample]" value="1"> 2<input type="checkbox" name="hoge2[sample]" id="hoge2[sample]" value="2"> 3<input type="checkbox" name="hoge3[sample]" id="hoge3[sample]" value="3"> 4<input type="checkbox" name="hoge4[sample]" id="hoge4[sample]" value="4"> 5 6<input type="checkbox" name="hoge1[test]" id="hoge1[test]" value="1"> 7<input type="checkbox" name="hoge2[test]" id="hoge2[test]" value="2"> 8<input type="checkbox" name="hoge3[test]" id="hoge3[test]" value="3"> 9<input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4"> 10 11<input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1">

このとき、「hogehoge[test]」にチェックをつけたら、[test]のチェックボックスのチェックだけ外れるようにしたいのですが、どのようにすれば良いでしょうか。
[sample]のチェックボックスはそのままです。

また「hoge4[test]」などにチェックを入れたら、「hogehoge[test]」のチェックは外したいです。

nameの付け方を変えれば良いという意見もあるかと思いますが、今回はそれはなしでお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/10/25 06:40

チェックは外すだけでつけなくてよいのでしょうか?
Discord

2019/10/25 06:42

すみません、説明文に補足があります。 とりあえず「hogehoge[test5]」にチェックをつけたら、外すでOKです。 また、他のにチェックをつけたら「hogehoge[test5]」は外したいです。
yambejp

2019/10/25 06:44

hogehoge[test5]が存在しないですね
Discord

2019/10/25 06:46

すみません、修正しました!
yambejp

2019/10/25 06:49

hogehoge[test]の処理で[test]を調整すると自分自身も[test]なので 影響しますが大丈夫ですか? それとともhoge1~5+[test]限定などの条件が必要ですか?
Discord

2019/10/25 07:05

自分自身には影響しない形でお願いします。
m.ts10806

2019/10/25 07:11

これは質問ではなくコード作成依頼です。
Discord

2019/10/25 07:23

すみません。。
m.ts10806

2019/10/25 07:26

謝るのではなくきちんと自身の試したこと調べたことを記載してそのコードの何が問題なのか、teratailとしての質問の形にしてください。 できれば質問テンプレートを利用してくださいね
Discord

2019/10/25 07:27

ありがとうございます。次回から改善いたします。 ご指摘ありがとうございます。
m.ts10806

2019/10/25 07:29

んー。「回答がついたからそれでいいじゃん」と言うことですね。これで次回からと後回しにする人で改善された人を見たことがありませんけど。 わかりました。では。
guest

回答2

0

jQuery

1$('[name="hogehoge\[test5\]"]').on('change', function(event) { 2 if (event.target.checked) { 3 $('[name$="\[test\]"]').prop('checked', false); 4 } 5});

https://api.jquery.com/attribute-ends-with-selector/
https://api.jquery.com/prop/

-- 仕様変更対応分追記

jQuery

1$(document).on('change', '[type="checkbox"][name$="\]"]', function(event) { 2 var target = event.target; 3 if (!target.checked) { 4 return true; 5 } 6 7 var escapedName = CSS.escape(target.name.replace(/.+[/, '[')); 8 if (target.name.startsWith('hogehoge')) { 9 $('[name$="' + escapedName + '"]').not(target).prop('checked', false); 10 } else { 11 $('[name="hogehoge' + escapedName + '"]').prop('checked', false); 12 } 13});

https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith

投稿2019/10/25 06:47

編集2019/10/25 07:47
x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Discord

2019/10/25 07:04

ありがとうございます。 ちなみになのですが、[test]の部分が変数で動的な場合も同様な形でできますでしょうか。 例えばhogehoge[test]にチェックをつけたら、[test]だけチェックが外れて、hogehoge[sample]なら[sample]だけチェックが外れるというように、少し汎用的に作りたいです。
x_x

2019/10/25 07:12

自身のチェックも外れるのでしょうか? もう少し仕様を煮詰めてくれるようお願いします。
Discord

2019/10/25 07:18

①<input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1"> にチェックをつける ②下記のチェックが外れる <input type="checkbox" name="hoge1[test]" id="hoge1[test]" value="1"> <input type="checkbox" name="hoge2[test]" id="hoge2[test]" value="2"> <input type="checkbox" name="hoge3[test]" id="hoge3[test]" value="3"> <input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4"> ③ <input type="checkbox" name="hoge1[test]" id="hoge1[test]" value="1"> <input type="checkbox" name="hoge2[test]" id="hoge2[test]" value="2"> <input type="checkbox" name="hoge3[test]" id="hoge3[test]" value="3"> <input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4"> いずれかにチェックが入ったら、 <input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1"> のチェックが外れる。 基本仕様は以上です。 ただし、hogehoge[test]の[test]が他の名前の場合もあるので、できれば[]の中身が同一の、他のチェックボックスのチェックを外す、みたいなことがしたいです。 わかりにくくてすみません。
x_x

2019/10/25 07:21

いままで触れていませんが、value 値が関係あるのですか?
Discord

2019/10/25 07:23

value値は特に気にしなくて大丈夫です。
x_x

2019/10/25 07:25

2種類のチェックボックスの違いは何でしょうか? name 属性値の最初が hogehoge ということですか?
Discord

2019/10/25 07:30

そうですね。 <input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1"> <input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4"> この違いはnameだけです。 <input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1"> にチェックをいれたら、 <input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4"> が外れ、 <input type="checkbox" name="hogehoge[sample]" id="hogehoge[sample]" value="-1"> にチェックをいれたら、 <input type="checkbox" name="hoge4[sample]" id="hoge4[sample]" value="4"> が外れるのが求めている挙動です。
Discord

2019/10/25 08:40

ありがとうございます!
guest

0

ベストアンサー

ちょっと命名方法がグダグダすぎるような気がしますがこんな感じで

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 document.querySelector('[id="hogehoge[test]"]').addEventListener('change',()=>{ 4 [].filter.call(document.querySelectorAll('[type=checkbox]'),x=>x.id.match(/hoge\d[test]/)).forEach(x=>{ 5 x.checked=false; 6 }); 7 }); 8 [].filter.call(document.querySelectorAll('[type=checkbox]'),x=>x.id.match(/hoge\d[test]/)).forEach(x=>{ 9 x.addEventListener('change',()=>{ 10 document.querySelector('[id="hogehoge[test]"]').checked=false; 11 }); 12 }); 13}); 14</script> 15<input type="checkbox" name="hoge1[sample]" id="hoge1[sample]" value="1" checked> 16<input type="checkbox" name="hoge2[sample]" id="hoge2[sample]" value="2" checked> 17<input type="checkbox" name="hoge3[sample]" id="hoge3[sample]" value="3" checked> 18<input type="checkbox" name="hoge4[sample]" id="hoge4[sample]" value="4" checked> 19 20<input type="checkbox" name="hoge1[test]" id="hoge1[test]" value="1" checked> 21<input type="checkbox" name="hoge2[test]" id="hoge2[test]" value="2" checked> 22<input type="checkbox" name="hoge3[test]" id="hoge3[test]" value="3" checked> 23<input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4" checked> 24 25<input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1">

挙動が違うようなら指摘ください

汎用性

※調整しました

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 var reg=new RegExp(`hogehoge\[(.+?)\]`); 4 [].filter.call(document.querySelectorAll('[type=checkbox]'),x=>x.id.match(reg)).map(x=>x.id.match(reg)[1]).forEach(id=>{ 5 var parent=document.querySelector(`[id="hogehoge[${id}]"]`); 6 var children=[].filter.call(document.querySelectorAll('[type=checkbox]'),x=>x.id.match(new RegExp(`hoge\d\[${id}\]`))); 7 parent.addEventListener('change',()=>{ 8 children.forEach(x=>{ 9 x.checked=false; 10 }); 11 }); 12 children.forEach(x=>{ 13 x.addEventListener('change',()=>{ 14 parent.checked=false; 15 }); 16 }); 17 }); 18}); 19</script> 20<input type="checkbox" name="hoge1[sample]" id="hoge1[sample]" value="1" checked> 21<input type="checkbox" name="hoge2[sample]" id="hoge2[sample]" value="2" checked> 22<input type="checkbox" name="hoge3[sample]" id="hoge3[sample]" value="3" checked> 23<input type="checkbox" name="hoge4[sample]" id="hoge4[sample]" value="4" checked> 24<input type="checkbox" name="hogehoge[sample]" id="hogehoge[sample]" value="-1"> 25<hr> 26<input type="checkbox" name="hoge1[test]" id="hoge1[test]" value="1" checked> 27<input type="checkbox" name="hoge2[test]" id="hoge2[test]" value="2" checked> 28<input type="checkbox" name="hoge3[test]" id="hoge3[test]" value="3" checked> 29<input type="checkbox" name="hoge4[test]" id="hoge4[test]" value="4" checked> 30<input type="checkbox" name="hogehoge[test]" id="hogehoge[test]" value="-1"> 31<hr> 32<input type="checkbox" name="hoge1[fuga]" id="hoge1[fuga]" value="1" checked> 33<input type="checkbox" name="hoge2[fuga]" id="hoge2[fuga]" value="2" checked> 34<input type="checkbox" name="hoge3[fuga]" id="hoge3[fuga]" value="3" checked> 35<input type="checkbox" name="hoge4[fuga]" id="hoge4[fuga]" value="4" checked> 36<input type="checkbox" name="hogehoge[fuga]" id="hogehoge[fuga]" value="-1">

投稿2019/10/25 06:53

編集2019/10/25 07:31
yambejp

総合スコア116661

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Discord

2019/10/25 07:04 編集

ありがとうございます。 ちなみになのですが、[test]の部分が変数で動的な場合も同様な形でできますでしょうか。 例えばhogehoge[test]にチェックをつけたら、[test]だけチェックが外れて、hogehoge[sample]なら[sample]だけチェックが外れるというように、少し汎用的に作りたいです。
Discord

2019/10/25 07:25

ありがとうございます!思っていたような動きができました。 ありがとうございます!
yambejp

2019/10/25 07:32

挙動は問題ないようなので見やすくしときました
Discord

2019/10/25 07:34

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問