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

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

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

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

jQuery

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

HTML

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

Q&A

1回答

1291閲覧

dt/ddでjQueryドロップダウンメニューを再現したい

smashdesign

総合スコア13

JavaScript

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

jQuery

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

HTML

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

0グッド

0クリップ

投稿2020/06/26 16:19

前提・実現したいこと

javascript知識ほぼゼロ者です。
事情により、グローバルメニューで以下のようなHTMLの構造を変更せずに、
jQueryのドロップダウンメニューを実装したいのですが、
以下のjavascriptでは、マウスポインターが隣接する<dt>に移動した場合、<dd>はSlideUpするのですが、

<dd>の領域からマウスポインターを移動した場合、SlideUpしてくれません。 正しい記述をご教授お願いします。

該当のソースコード

HTML

1<dl class="toggle"> 2 <dt>hoverメニュー1</dt> 3 <dd> 4 <ul> 5 <li>ドロップダウンメニュー1</li> 6 <li>ドロップダウンメニュー1</li> 7 <li>ドロップダウンメニュー1</li> 8 </ul> 9 </dd> 10 <dt>hoverメニュー2</dt> 11 <dd> 12 <ul> 13 <li>ドロップダウンメニュー2</li> 14 <li>ドロップダウンメニュー2</li> 15 <li>ドロップダウンメニュー2</li> 16 </ul> 17 </dd> 18   <dt>hoverメニュー3</dt> 19 <dd> 20 <ul> 21 <li>ドロップダウンメニュー3</li> 22 <li>ドロップダウンメニュー3</li> 23 <li>ドロップダウンメニュー3</li> 24 </ul> 25 </dd> 26</dl>

CSS

1dd { 2display:none; 3}

javascript

1$(function(){ 2 $('.toggle dt').hover(function() { 3 $(this).next('.toggle dd').slideDown(); 4 $('.toggle dd').not($(this).next('.toggle dd')).slideUp(); 5 }); 6});

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

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

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

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

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

m.ts10806

2020/06/26 23:03

知識0の状態でどうやってここまで組んだのでしょう。どの程度このコードを理解されてますか?
smashdesign

2020/06/27 02:26

アコーディオンメニュー用のjsコードの、on clickをhoverに変更しただけのものです。なので、マウスオーバー特有の動きに対応できません。
guest

回答1

0

メニュー(dl)の領域からマウスポインターが外れたら全部ddを閉じちゃうといいと思います。

JavaScript

1 $('.toggle').mouseleave(function() { 2 $('.toggle dd').slideUp(); 3 });

投稿2020/06/26 21:07

shun-K

総合スコア508

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

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

smashdesign

2020/06/27 02:26

ご回答ありがとうございます。 以下の様にコードを直しましたが、slideDownしたddエリア(リストメニュー)にマウスオーバーすると、slideUp(メニューが閉じて)しまいます。 $(function(){ $('.toggle dt').hover(function() { $(this).next('.toggle dd').slideDown(); $('.toggle dd').not($(this).next('.toggle dd')).slideUp(); }); $('.toggle').mouseleave(function() {    $('.toggle dd').slideUp(); }); }); 下記も試してみましたが、いまいち上手くslideUpしません。 $(function(){ $('.toggle dt').hover(function() { $(this).next('.toggle dd').slideDown(); $('.toggle dd').not($(this).next('.toggle dd')).slideUp(); }); $('.toggle dd').mouseleave(function() {     $(this).slideUp(); }); });
shun-K

2020/06/27 04:34

うーん、上のコードで問題ないはずなんですが。 ($('.toggle dd').slideUp();の前が全角スペースなのは気になりますが関係なさそう) メニュー(dl)の領域からマウスポインタが外れない限りは閉じないはずです。 メニュー(dl)の領域(.toggle)がどこまでなのかわかりやすくするために 背景に色をつけて試してみてください。 .toggle { background-color: red !important; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問