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

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

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

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

Q&A

解決済

1回答

2628閲覧

アコーディオンメニュー 開いてある要素をクリックしても閉じない

ayuayuayu

総合スコア68

JavaScript

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

0グッド

0クリップ

投稿2021/09/14 06:57

編集2021/09/14 07:57

クッキーを使ってページ移行した時、開いたままにするアコーディオンメニューを作っています。
この時に開いてあるところをクリックしたら閉じてまた開いてしまいます。
とれを開いてる所をクリックしたら閉じるようにしたいのですけどうまく行きません、、、
この場合、クッキー部分のif文をかえないとダメでしょうか?

jquery-cookieを利用しています。

<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'); $('span').not($(this)).siblings('ul').slideUp(); // メニュー表示/非表示 $(child).slideToggle('fast', function() { // 有効期限は1日(クッキーにはドメインをセットしない、ブラウザを閉じたら初期化) $.cookie($(child).attr('id'), $(child).css('none'), { expires: 1 }); }); });; }); </script>

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

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

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

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

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

yambejp

2021/09/14 07:55

jquery-cookieを利用している前提でよろしいですか?
ayuayuayu

2021/09/14 07:56

はい!そうです!
guest

回答1

0

ベストアンサー

jquery-cookieはsameSite属性の設定ができないので非推奨かもしれません。
js.cookie.jsが公開されているのでそちらをご利用ください

javascript

1<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script> 2<script> 3$(function () { 4 self=$(this); 5 $('.aco-menu > ul').hide().filter('#'+Cookies.get('visible')).show(); 6 $('.aco-menu > span').on('click',function() { 7 $(this).next('ul').slideToggle().queue(function(){ 8 Cookies.set('visible',$(this).is(':visible')?$(this).attr('id'):'none',{sameSite:"lax"}); 9 $(this).dequeue(); 10 }).siblings('ul').filter(function(){ 11 return !$(this).prev('span').is(self) && $(this).is(':visible'); 12 }).slideUp(); 13 setTimeout(()=>console.log(document.cookie),1000); 14 }); 15}); 16 </script> 17<div class="aco-menu"> 18<span>メニュー 1</span> 19<ul id="child1"> 20<li><a href="#">メニュー 1-1</a></li> 21<li><a href="#">メニュー 1-2</a></li> 22<li><a href="#">メニュー 1-3</a></li> 23</ul> 24<span>メニュー 2</span> 25<ul id="child2"> 26<li><a href="#">メニュー 2-1</a></li> 27<li><a href="#">メニュー 2-2</a></li> 28<li><a href="#">メニュー 2-3</a></li> 29</ul> 30<span>メニュー 3</span> 31<ul id="child3"> 32<li><a href="#">メニュー 3-1</a></li> 33<li><a href="#">メニュー 3-2</a></li> 34<li><a href="#">メニュー 3-3</a></li> 35</ul> 36</div>

投稿2021/09/14 10:42

yambejp

総合スコア115012

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

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

ayuayuayu

2021/09/15 02:41

すごい、、、 完璧です!ありがとうございます!! 書いてあるコードを理解できるように一つずつ勉強します!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問