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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

285閲覧

clickで作動するドロップダウンメニューに曽孫階層を

R4-D4

総合スコア2

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2022/06/27 02:12

マウスオンで反応するものでなくクリックするとサブメニューが現れるタイプの多階層ドロップダウンメニューを作る必要に迫られています。

hoverで作動するタイプの3階層〜4階層まで下ることの出来るメニューなら検索するとサンプルがいくつも見つかるのですが、https://codepen.io/R4-D4/pen/jOzNwya このようにclickで作動するものにしようとすると、孫メニューの li タグの内側に更に ul から /ul までの孫メニューをワンセット増設してやれば曽孫メニューも出るだろうと思ったのに出てくれません。

もしかするとスタイルシートの中に li ul li ... といった設定を加えれば良いのかなとも思うのですが、具体的にはどうしたら良いのかわかりません。

曽孫メニューや、もし可能なら更に玄孫メニューも出せるように出来ないでしょうか?

ご教示いただけると幸いです。
どうかよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

イベントのバブリングという現象があります。
子要素のクリックの後に、親要素のクリックイベントも発生してしまうという現象です。
まず、それを止める必要があります。

あと、すべての li ul を非表示にしてますが、クリックした子孫要素のみ非表示にするようにしましょう。

上記の点を修正すると下記のようになります。

js

1 $('li').click(function(e) { 2 e.stopPropagation(); // 親へのイベントの伝播を止める 3 if ($(this).attr('class') == 'selected') { 4 // 5 $(this).removeClass('selected').children('ul').animate({ 6 width: 'hide' 7 }, 'fast'); 8 } else { 9 10 // 子孫要素のみ対象にする 11 $(this).find('li').removeClass('selected'); 12 $(this).find('li ul').hide(); 13 14 //以下略

他にも修正点はあると思いますが、とりあえずこれで 曽孫階層は開きます。

投稿2022/06/27 07:55

hatena19

総合スコア33715

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

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

R4-D4

2022/06/27 12:35

早々にありがとうございます。 スタイルシートの設定が悪くて曽孫メニューの垂直位置がおかしい状態ではありますが、おかげさまで一番困っていた部分を突破できました。 曽孫階層を開こうとするメニュー部分をクリックすると孫メニュー全体がリロードされるみたいな動作をするのでおかしいなと思っていたのですが、これがそのバブリングという現象なのですね。 私は何せ元が技術者でないのでサンプルソースの改造で僅かずつ知識を追加するくらいのレベルの人間で、解明は程遠い状態でした。 どうもありがとうございました。
R4-D4

2022/06/27 23:33

ご教示頂いた後、曽孫メニューの出現位置を直そうとCSSを探っていましたが、原因はjsの中にあったようで、 $('#menu').offset().top - 20; という部分の20を35にすることで、ほぼ問題の無い表示になってきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問