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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

jQuery

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

CSS

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

Q&A

解決済

1回答

1918閲覧

アコーディオンメニューのクッキーと開閉について

ayuayuayu

総合スコア68

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

jQuery

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

CSS

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

0グッド

0クリップ

投稿2021/07/20 04:42

編集2021/07/20 05:07

アコーディオンメニューでクッキーに記憶してその項目を開いたままにしてます。
それに加えて、メニューを開いたら他を閉じるコードを追加したのですが、
メニュー を開くと、一瞬全てのメニューが開いてからクリックしたメニューが開いてしまいます。
これは何が原因なのでしょうか、、、?
あと、ページを更新すると全てのメニューが開いた状態になってしまうのも直したいです。。。

//開閉させるのコードは書いてある位置じゃないと動きませんでした、、、

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <body> <div class="aco-menu"> <span>メニュー 1</span> <ul id="child1"> <li><a href="#">メニュー 1-1</a></li> <li><a href="#">メニュー 1-2</a></li> <li><a href="#">メニュー 1-3</a></li> </ul> <span>メニュー 2</span> <ul id="child2"> <li><a href="#">メニュー 2-1</a></li> <li><a href="#">メニュー 2-2</a></li> <li><a href="#">メニュー 2-3</a></li> </ul> <span>メニュー 3</span> <ul id="child3"> <li><a href="#">メニュー 3-1</a></li> <li><a href="#">メニュー 3-2</a></li> <li><a href="#">メニュー 3-3</a></li> </ul> </div> <script> $(function () { for (var i = 1; i <= $('ul').length; i++) { // クッキーがblockであれば読み込み時にメニューをオープンする if ($.cookie('child' + i) == 'block') { $('#child' + i).show(); } } $('span').click(function() { var child = $(this).next('ul');   //開閉させる $(this).siblings('ul').slideToggle(); $('span').not($(this)).siblings('ul').slideUp(); // メニュー表示/非表示 $(child).slideToggle('fast', function() { // 有効期限は1日(クッキーにはドメインをセットしない、ブラウザを閉じたら初期化) $.cookie($(child).attr('id'), $(child).css('display'), { expires: 1 }); }); });; }); </script> </body>
.aco-menu { text-align:center; } .aco-menu ul { display: none; list-style:none; } .aco-menu span { cursor: pointer; display:block; background:#F66; border:solid 1px #F06; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

$(this).siblings('ul').slideToggle();についてですが、これは「thisの兄弟であるul全てをスライド」という意味ですので、全てのアコーディオンが締まっている時にメニューをクリックすると、兄弟である全てのサブメニューが開くことになります。

child.slideToggle();がやりたかったことではないですか?


__あと、ページを更新すると全てのメニューが開いた状態になってしまうのも直したいです。。。 __

$(child).css('display')ですが、childにはクリックされたサブメニューが入っているので、常にblockです。
ですので、クッキーがnoneなど別の値になる状態がないです。

投稿2021/07/20 05:07

編集2021/07/20 05:14
Lhankor_Mhy

総合スコア36104

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

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

ayuayuayu

2021/07/20 05:32

ありがとうございます。child.slideToggle(); にしてみたところ他は開かなくなりました!ですが、クリックしたメニューが開いて→閉じて→開く という状況です、、 $(child).css('display') ですが クッキーをnoneにしとかないといけないんですよね、、? 理解が追い付かずすいません、、、
Lhankor_Mhy

2021/07/20 05:43

> ですが、クリックしたメニューが開いて→閉じて→開く という状況です では、その行がそもそもいらないのでは。 --- > クッキーをnoneにしとかないといけないんですよね、、? おっしゃるとおりです!
ayuayuayu

2021/07/20 05:56

>では、その行がそもそもいらないのでは。 消してみたらうまく行きました!!!! ありがとうございます!! >おっしゃるとおりです! やってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問