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

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

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

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

Q&A

解決済

1回答

2734閲覧

【jQuery】親・子・孫関係がある場合のslideToggle()

pecchan

総合スコア555

jQuery

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

0グッド

0クリップ

投稿2016/05/28 01:28

こちらのおかげで親・子・孫関係のチェックボックスの実装が出来ました。
親のON・OFFで子と孫を連動、子のON・OFFで孫を連動しました。

ここまでは良かったのですが、以下の手順で操作すると意図した表示になりません。

1.親(本)をONにする→子・孫がONの状態で表示される。
2.子(コミック)をOFFにする→孫が全てOFFの状態、トグルで隠れる。
3.この状態で親(本)をOFFにする→子が全てOFFの状態、トグルで隠れる。
4.再び親(本)をONにする→1の状態で表示したいが、子までしか表示されない。

作りの問題だと思っていますが、4の時に1と同じく孫まで表示したいのですが分かりません。。。
どのような方法があるでしょうか?

宜しくお願い致します。

html

1<p><input type="checkbox" id="book" value="01"/></p> 2 <div id="book-group"> 3 <input type="checkbox" id="comic" value="001"/>コミック</p> 4 <div id="comic-group"> 5 <p><input type="checkbox" name="books[]" value="1" id="1"/>ドラゴンボール </p> 6 <p><input type="checkbox" name="books[]" value="2" id="2"/>ジョジョの奇妙な冒険 </p> 7 <p><input type="checkbox" name="books[]" value="3" id="3"/>幽遊白書 </p> 8 </div> 9 <input type="checkbox" id="novel" value="002"/>小説</p> 10 <div id="novel-group"> 11 <p><input type="checkbox" name="books[]" value="4" id="4"/>ソロモンの偽証 </p> 12 <p><input type="checkbox" name="books[]" value="5" id="5"/>火花 </p> 13 <p><input type="checkbox" name="books[]" value="6" id="6"/>コーヒーが冷めないうちに </p> 14 </div> 15 16 <input type="checkbox" id="magazine" value="003"/>雑誌</p> 17 <div id="magazine-group"> 18 <p><input type="checkbox" name="books[]" value="7" id="7"/>VERY </p> 19 <p><input type="checkbox" name="books[]" value="8" id="8"/>sweet </p> 20 </div> 21 </div>

jQuery

1 2// ページ読み込み完了後に実行 3$(window).load(function(){ 4 5 //初期表示は全て非表示 6 $('[id*=group]').css("display", "none"); 7 8}); 9 10 11 12$(function(){ 13 14 $("input").click(function () { 15 16 17 //クリックされたチェックボックスのグループ名を取得 18 var groupName = $(this).attr("id") + 'group'; 19 20 //グループ内のチェックボックスを取得 21 var targets = $("#" + groupName).find("input"); 22 23 if(this.checked){ 24 targets.prop('checked', true); 25 26 }else{ 27 targets.prop('checked', false); 28 29 } 30 31 //トグル 32 $("#" + groupName).slideToggle(); 33 34 35 36 37 }); 38}); 39

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分の下位は全部開かせる場合。

JavaScript

1$( '#' + groupName ).slideToggle().find( '#' + groupName + '[id$="group"]' ).slideDown();

書かれたコードではここが問題で動かなかった。ちなみに<p>が数箇所足りません。

JavaScript

1var groupName = $(this).attr("id") + '-group'; // 「-」が無かった

追記:

ミスを指摘しながら書きミスしていました、すいません。

JavaScript

1$( '#' + groupName ).slideToggle().find( '[id$="group"]' ).slideDown();

動くサンプル https://jsfiddle.net/nfwnzszx/

投稿2016/05/28 02:14

編集2016/05/28 04:15
kei344

総合スコア69398

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

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

pecchan

2016/05/28 02:57

有難う御座います。 以下記載ミスでした。すみません。 ・<p>足りない ・'group'ではなく'-group' 教えていただいた、find()で自分の下位を操作する方法、 試しましたが動き変わらずでした・・・。
kei344

2016/05/28 04:15

すいません、ミスがあったので回答に追記しました。
pecchan

2016/05/28 04:33

とんでもないです。 度々すみませんでした。 有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問