アコーディオンメニューでクッキーに記憶してその項目を開いたままにしてます。
それに加えて、メニューを開いたら他を閉じるコードを追加したのですが、
メニュー を開くと、一瞬全てのメニューが開いてからクリックしたメニューが開いてしまいます。
これは何が原因なのでしょうか、、、?
あと、ページを更新すると全てのメニューが開いた状態になってしまうのも直したいです。。。
//開閉させるのコードは書いてある位置じゃないと動きませんでした、、、
<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; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/20 05:32
2021/07/20 05:43
2021/07/20 05:56