実現したいこと
$.eachで回している時に、appendで追加した要素に対して、アコーディオンリストの自動開閉イベントを発生させたいです
発生している問題
$.eachで作成したアコーディオンリストの自動開閉がうまくいかないです。
$.eachで作成したアコーディオンリストをクリックすると、開いてすぐに閉じてしまいます。
該当のソースコード
html
1<div class="wrap"> 2 <h3 class="open_h3 btn-7">test1</h3> 3 <ul class="open_parent open-7"></ul> 4 <h3 class="open_h3 btn-7">test2</h3> 5 <ul class="open_parent open-7"></ul> 6 <!-- <h3 class="open_h3 btn-7">BRAND INFO</h3> 7 <ul class="open_parent open-7"></ul> --> 8</div>
javascript
1var li_1 = ""; 2for (var i = 1; i <= 5; i++) { 3 li_1 += "<li>項目" + i + "</li>"; 4} 5var array = ["A", "B"]; 6var append_parent = ""; 7var append_child = ""; 8 9$.each(array, function (index, val) { 10 $('ul.open_parent').each(function () { 11 append_parent = $('<li><h3 class="open_h3 btn-8">' + val + '</h3></li>'); 12 append_child = $('<ul class="open_child open-8">' + li_1 + '</ul>'); 13 $(this).append(append_parent); 14 $(this).children('li').append(append_child); 15 }); 16 17 // サブメニューを閉じる 18 append_child.ready(function () { 19 $('.open-8').hide(); 20 }); 21 22 // サブメニューの自動開閉 23 append_parent.ready(function () { 24 $('.btn-8').click(function () { 25 $(this).next('.open-8').slideToggle('slow').siblings('.open-8').slideUp('slow'); 26 $(this).siblings('.btn-8').removeClass('active'); 27 $(this).toggleClass('active'); 28 }); 29 }); 30}); 31 32 $('.open-7').hide(); 33 34 $('.btn-7').click(function () { 35 $(this).next('.open-7').slideToggle('slow').siblings('.open-7').slideUp('slow'); 36 $(this).siblings('.btn-7').removeClass('active'); 37 $(this).toggleClass('active'); 38 });
css
1.wrap { 2 width: 800px; 3 padding: 10px 20px; 4 border: 1px solid #000; 5} 6h3.open_h3 { 7 border-bottom: 1px dotted #a9a9a9; 8 cursor: pointer; 9 margin: 0; 10} 11.open_h3:after, 12.open_h3.active:after { 13 font-size: 22px; 14 margin-left: 20px; 15} 16.open_h3.active::after { 17 content: "▲"; 18} 19.open_h3::after { 20 content: "▼"; 21} 22.info { 23 font-size: 13px; 24} 25
試したこと
$.eachの外にappend_child.readyとappend_parent.readyを置いて実行してみました。
ですが、他のサブメニューをクリックしても、自動開閉が出来ませんでした。
どうかご助言を頂けたらと存じます。
また、多階層アコーディオンメニューの自動開閉で、addEventListenerを使って、
簡単に書くことが出来れば、そちらもご助言いただけたらと存じます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/04 01:40
2021/02/04 01:46
2021/02/04 01:48