以下の//*ここ
の箇所をご覧いただきたいのですが、動的にis_expanded
が加えられた場合、そのクラスがあれば処理を実行したいと考えております。
動くサンプル
こちらのサンプルをご覧いただければわかりやすいのですが、ドロップダウンリストを作成しており、クリックした開くきっかけとなった要素をクリックすると、リストが閉じるような仕様を想定しております。
これをイメージしたのですが、実際には時差がなく、クリックしたらis_expanded
が加えられると同時に反応して$(this).next().slideUp(200,'linear');
が動作してしまいます。setTimeOutなどで時間差を設けるような仕様はあまり適切ではないと思っているのですが、どのようにすれば、意図したクラスのつけはずしでドロップダウンリストを隠すことができるかアドバイスをいただければ幸いです。
html
1<div class="btn_wrapper no_margin_bottom dropdown"> 2 <div class="icon_left"><i class="fas fa-chevron-down"></i></div><div class="btn select_public_text">公式テキストの選択表示</div> 3</div> 4 5<div class="dropdown_wrapper public_text"> 6 <ul> 7 <li class="default_li"><div class="icon_left"></div><a>C1</a></li> 8 <li><div class="icon_left"></div><a>C2</a></li> 9 <li><div class="icon_left"></div><a>C3</a></li> 10 </ul> 11</div>
JavaScript
1 2 dropdown_list('.dropdown','.dropdown_wrapper li','.dropdown_wrapper','.is_expanded'); 3 4 5function dropdown_list(clicked_item,reverse_item,parent_item,expanded_item){ 6 $(clicked_item).on('click',function(){ 7 $(this).addClass('is_expanded') 8 $(this).next().slideDown(200,'linear'); 9 }) 10 $(reverse_item).on('click',function(){ 11 $(this).parent().parent().slideUp(200,'linear'); 12 }) 13 $(clicked_item).on('click',function(){//*ここ 14 if($(this).hasClass('is_expanded')){ 15 $(this).next().slideUp(200,'linear'); 16 } 17 }) 18}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/26 06:28
2021/07/26 07:40