質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

jQuery

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

Q&A

解決済

2回答

1154閲覧

jQueryでラジオボタン(チェックボックス)を選択したときに付属するラジオボタン(チェックボックス)の選択可否を切り替えたい

ytail

総合スコア13

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/02/02 13:56

前提・実現したいこと

javascript、jQueryを独学で学んでいます。
ラジオボタン(チェックボックス)が入れ子の場合に、parentを選択時、そのchildrenのみ選択可能状態に切り替えるjQueryを組んでいます。

parentにチェックが入っている場合は、それに付随したchildrenのみラジオボタン(チェックボックス)が選択可能な状態にしたいのですが、
どうしても、parentとそのchildrenというのが指定できず、全てのchildrenボタンが切り替わってしまいます。また、元に戻りません。

希望の仕様はこれです。
初期値は、全てのchildrenは選択不可状態
single選択時は全てのchildrenはチェックを外し、選択不可状態
parent選択時は、付随するchildrenのみ選択可能状態にし、他のchildrenはチェックを外し、選択不可状態にする
parentの選択が外れたら、そのchildrenはチェックを外し、選択不可状態にする

行き詰まっています。よろしくお願いします。

HTML

<ul> <li><label><input type="radio" name="item" id="single">single</label></li> <li><label><input type="radio" name="item" id="parent">parentA</label> <ul> <li><label><input type="radio" name="children">children</label></li> <li><label><input type="radio" name="children">children</label></li> </ul> </li> <li><label><input type="radio" name="item" id="parent">parentB</label> <ul> <li><label><input type="radio" name="children">children</label></li> <li><label><input type="radio" name="children">children</label></li> </ul> </li> <li><label><input type="checkbox" name="item" id="parent">parentC</label> <ul> <li><label><input type="checkbox" name="children">children</label></li> <li><label><input type="checkbox" name="children">children</label></li> </ul> </li> </ul>

jQuery

$(function(){ $('input[id=parent]').each(function() { //デフォルト $('input[name="children"]').prop('checked', false).prop('disabled', true); $('input[id=parent]').change(function() { //parentがチェックされたら直下のchildrenのみチェック可 if ($(this).prop("checked")) { $('input[name="children"]').prop('checked', true).prop('disabled', false); } else { //parentがチェックされていない直下のchildrenはチェック不可 $('input[name="children"]').prop('checked', false).prop('disabled', true); } }); }); });

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんな感じですか?

javascript

1<script> 2$(function(){ 3 $('.parent').on('change',function(){ 4 $('.parent').closest('li').find('.children').prop('disabled',function(){ 5 return !$(this).closest('li:has(.parent)').find('.parent').prop('checked'); 6 }); 7 }).eq(0).trigger('change'); 8}); 9</script> 10<ul> 11 <li><label><input type="radio" name="item" class="single parent">single</label></li> 12 <li><label><input type="radio" name="item" class="parent">parentA</label> 13 <ul> 14 <li><label><input type="radio" name="children" class="children">children</label></li> 15 <li><label><input type="radio" name="children" class="children">children</label></li> 16 </ul> 17 </li> 18 <li><label><input type="radio" name="item" class="parent">parentB</label> 19 <ul> 20 <li><label><input type="radio" name="children" class="children">children</label></li> 21 <li><label><input type="radio" name="children" class="children">children</label></li> 22 </ul> 23 </li> 24 <li><label><input type="checkbox" name="item" class="parent">parentC</label> 25 <ul> 26 <li><label><input type="checkbox" name="children" class="children">children</label></li> 27 <li><label><input type="checkbox" name="children" class="children">children</label></li> 28 </ul> 29 </li> 30</ul>

投稿2019/02/04 04:47

yambejp

総合スコア114769

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

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

ytail

2019/02/04 13:32

できました!ありがとうございます!
guest

0

idはHTML内で重複できません。提示のコードであればclassに変えるほうが妥当だと思います。
要素の取得は自分の直近のLI要素まで遡って、その中にあるUL要素内のINPUT要素にアクセスするように書き換えてください。

【jQueryで親要素を取得する:parent(), parents(), closest() | UX MILK】
https://uxmilk.jp/8150

投稿2019/02/02 14:01

kei344

総合スコア69398

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問