現在、店舗の商品をまとめるWebアプリを作成しています。
今回jQuery周りで問題が発生している2つの機能は以下になります。
【詳細の表示切り替え】
ページには「商品名」とその「詳細」の一覧が表記されており、「商品名」をクリックすると、デフォルトでdisplay: none;になっている「詳細」がjQueryのslideToggleで表示される仕組みです。
【項目順にソート】
ページの上部には「項目」があり、「項目」をクリックすると、jQueryを用いて「タイトル」を「項目」順にsortすることができます。
【問題点】
今回、遭遇した問題点は以下になります。
「詳細」がslideされる機能と、「項目」順にsortされる機能、それぞれ単体では期待通り動作することを確認しました。しかし、一度sortしてから「商品名」をクリックしても「詳細」がslideされなくなります。
ある程度調べたのですが、解決できる答えまで辿りつけなかったです。
jQueryが分かる方いらっしゃいましたら、ご教授宜しくお願いします。
html
1<div class="container"> 2 <div class="sort"> 3 <ul> 4 <li rel="name">名前</li> 5 <li rel="detail">値段</li> 6 </ul> 7 </div> 8 <div class="list"> 9 <div class="product"> 10 <div class="name">〇〇</div> 11 <div class="detail">●●円</div> 12 </div> 13 <div class="product"> 14 <div class="name">□□</div> 15 <div class="detail">■■円</div> 16 </div> 17 <div class="product"> 18 <div class="name">△△</div> 19 <div class="detail">▲▲円</div> 20 </div> 21 </div> 22</div>
CSS
1.detail { 2 display: none; 3}
jQuery
1$(function() { 2 $('.sort ul li').on('click', function() { 3 var rel = $(this).attr('rel'); 4 $('.list').html( 5 $('.product').sort(function(a, b) { 6 var valueA = $(a).find('.'+rel).text(); 7 var valueB = $(b).find('.'+rel).text(); 8 if (valueA < valueB) { 9 return 1; 10 } else { 11 return -1; 12 } 13 }) 14 ); 15 }); 16 $('.name').on('click', function() { 17 $(this).next('.detail').slideToggle(); 18 }); 19});
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 03:18
2020/08/21 03:21
2020/08/21 03:31