質問失礼いたします。
前提・実現したいこと
下記記事を参考に、絞り込み検索+ページネーションを作成しております。
https://teratail.com/questions/158985
上記とは違い複数条件での絞り込みを行いたく、
チェックボックスを用いているのですがページ数の値の取り方で苦戦しており..
ご教授頂けますと幸いです;
発生している問題
- ページネーションの表示数が変化しない
下記コードで、「カテゴリ1」のみ選択している場合はページ数は「1」となってほしいのですが
常に1、2と全ページ表示されてしまいます。
該当のソースコード
html
1 <div class="serchBox"> 2 <div class="checkboxArea"> 3 <label for="small"> 4 <input type="checkbox" name="category" value="category1" id="category1" />カテゴリ1 5 </label> 6 <label for="middle"> 7 <input type="checkbox" name="category" value="category2" id="category2" />カテゴリ2 8 </label> 9 <label for="large"> 10 <input type="checkbox" name="category" value="category3" id="category3" />カテゴリ3 11 </label> 12 </div> 13 <button id="reset">リセット</button> 14 </div> 15 16 <ul class="list"> 17 <li><p class="category"><span class="category1">カテゴリ1</span></p></li> 18 <li><p class="category"><span class="category1">カテゴリ1</span></p></li> 19 <li><p class="category"><span class="category1">カテゴリ1</span></p></li> 20 <li><p class="category"><span class="category1">カテゴリ1</span></p></li> 21 <li><p class="category"><span class="category1">カテゴリ1</span></p></li> 22 <li><p class="category"><span class="category2">カテゴリ2</span></p></li> 23 <li><p class="category"><span class="category2">カテゴリ2</span></p></li> 24 <li><p class="category"><span class="category2">カテゴリ2</span></p></li> 25 <li><p class="category"><span class="category2">カテゴリ2</span></p></li> 26 <li><p class="category"><span class="category2">カテゴリ2</span></p></li> 27 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 28 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 29 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 30 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 31 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 32 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 33 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 34 <li><p class="category"><span class="category3">カテゴリ3</span></p></li> 35 </ul> 36 <ul id="pager"></ul> 37
jQuery
1var page_item_count = 10;//1ページ最大表示数 2var page_num = 1;//ページ番号 3 4$(function () { 5 paging(); 6 7 //ページ切り替え 8 $(document).on("click","#pager li",function(){ 9 page_num = $(this).data("page"); 10 paging(); 11 }); 12 13 14 $(function() { 15 page_num = 1; 16 17 $(document).on('change', '.serchBox input[type=checkbox]', function() { 18 filter_list(); 19 }); 20 21 // リセットボタン 22 $('#reset').on('click', function() { 23 $('.serchBox input[type=checkbox]:checked').prop('checked', false); 24 filter_list(); 25 paging(); 26 }); 27 28 29 // リストを絞り込む関数 30 function filter_list() { 31 var lists = $('.list li'); 32 lists.show(); 33 paging(); 34 35 // checkboxの絞り込み 36 for (var i = 0; i < $('.serchBox .checkboxArea').length; i++) { 37 38 var item = $('.serchBox .checkboxArea').eq(i).find('input:checkbox').attr('name'); 39 40 var target = []; 41 $('[name=' + item + ']:checked').each(function() { 42 target.push($(this).val()); 43 }); 44 45 if(target.length) { 46 for (var j = 0; j < lists.length; j++) { 47 48 var showCheck = false; 49 for (var k = 0; k < target.length; k++) { 50 if(lists.eq(j).find('.' + item).find('span').hasClass(target[k])) { 51 showCheck = true; 52 } 53 } 54 55 if(!showCheck) { 56 lists.eq(j).hide(); 57 } 58 }; 59 } 60 } 61 } 62 }); 63 64 function display(){ 65 $(".list li").show(); 66 67 } 68 69 function paging(){ 70 display(); 71 var paging = $("#pager"); 72 paging.empty(); 73 var list_data = $(".list li:visible"); 74 var page_count = Math.ceil( list_data.length / page_item_count); 75 for(var i = 1;i <= page_count;i++){ 76 var pg = $("<li></li>",{"text":i,"data-page":i}) 77 if(i == page_num){ 78 pg.addClass("active"); 79 } 80 paging.append(pg); 81 } 82 83 var start = ((page_num-1)*page_item_count); 84 var end = start + page_item_count-1; 85 for(var i = 0;i < list_data.length;i++){ 86 if(start > i || end < i){ 87 $(list_data[i]).hide(); 88 } 89 } 90 } 91 92});
補足情報
絞り込みは下記を参考にさせて頂いております。
http://cly7796.net/wp/javascript/implement-the-process-of-narrowing-down-the-list/
おそらく?ページ数をカウントするためのlist数が取得出来てないせいかと思うのですが、
どのように記述すればよいのかわからず...
まだまだjQuery勉強中のため、お見苦しい点が多々あるかと思いますが
何卒よろしくお願いいたします。