🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

1366閲覧

jQuery チェックボックスによる絞り込みとページネーションの組み合わせにおける不具合

salmonsalmon

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/11/28 21:49

編集2020/11/29 03:18

質問失礼いたします。

前提・実現したいこと

下記記事を参考に、絞り込み検索+ページネーションを作成しております。
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勉強中のため、お見苦しい点が多々あるかと思いますが
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cerfweb

2020/11/28 22:09

htmlに#pagerが見当たりませんが。
salmonsalmon

2020/11/29 03:19

ご指摘ありがとうございます。 記載漏れがあり大変失礼しました; #pager追記いたしました。
guest

回答1

0

一旦全て表示させたところで:visibleをカウントしているのが原因です。
以下のように修正してみてください。

jQuery

1 function filter_list() { 2 var lists = $('.list li'); 3 lists.show(); 4 // paging(); これを下へ移動 5 6 // checkboxの絞り込み 7 for (var i = 0; i < $('.serchBox .checkboxArea').length; i++) { 8 // (中略) 9 } 10 11 paging(); // ここに移動 12 } 13 14 function paging(){ 15 // display(); 削除(以下、省略)

投稿2020/11/30 12:20

cerfweb

総合スコア1907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salmonsalmon

2020/12/09 09:20

ご連絡遅くなり申し訳ありません。ご回答いただきありがとうございます! ご指摘頂きましたようにソースを修正したところ、ページングが挙動しなくなってしまい..; お手数ですが下記コードご確認頂けますでしょうか; ※リセットボタン押下時、ページングが反映せずでしたので「paging();」外してみました。 -------------------------------------------------------------------------------- var page_item_count = 10;//1ページ最大表示数 var page_num = 1;//ページ番号 $(function () { paging(); //ページ切り替え $(document).on("click","#pager li",function(){ page_num = $(this).data("page"); paging(); }); $(function() { page_num = 1; $(document).on('change', '.serchBox input[type=checkbox]', function() { filter_list(); }); // リセットボタン $('#reset').on('click', function() { $('.serchBox input[type=checkbox]:checked').prop('checked', false); filter_list(); }); // リストを絞り込む関数 function filter_list() { var lists = $('.list li'); lists.show(); // checkboxの絞り込み for (var i = 0; i < $('.serchBox .checkboxArea').length; i++) { var item = $('.serchBox .checkboxArea').eq(i).find('input:checkbox').attr('name'); var target = []; $('[name=' + item + ']:checked').each(function() { target.push($(this).val()); }); if(target.length) { for (var j = 0; j < lists.length; j++) { var showCheck = false; for (var k = 0; k < target.length; k++) { if(lists.eq(j).find('.' + item).find('span').hasClass(target[k])) { showCheck = true; } } if(!showCheck) { lists.eq(j).hide(); } }; } } paging(); } }); function display(){ $(".list li").show(); } function paging(){ var paging = $("#pager"); paging.empty(); var list_data = $(".list li:visible"); var page_count = Math.ceil( list_data.length / page_item_count); for(var i = 1;i <= page_count;i++){ var pg = $("<li></li>",{"text":i,"data-page":i}) if(i == page_num){ pg.addClass("active"); } paging.append(pg); } var start = ((page_num-1)*page_item_count); var end = start + page_item_count-1; for(var i = 0;i < list_data.length;i++){ if(start > i || end < i){ $(list_data[i]).hide(); } } } });
cerfweb

2020/12/11 15:53

#pager li をクリックした時の動作ですが、paging(); じゃなくてfilter_list(); ですね。 あと、$(function(){...}の中に$(function(){...}がありますが、最初の1回だけで全部を括って、中のやつは削除しましょう。コードを少し整理した方がいいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問