質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

3275閲覧

絞り込み検索をボタンを押して実行したいです

spraut

総合スコア6

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/08/21 05:20

編集2020/08/21 07:54

前提・実現したいこと

記事の一覧ページを作っていて、チェックボックスやラジオボタンを選択することで
記事を絞り込めるようにしたいです。
また、チェックを入れた瞬間にではなく検索ボタンを押した時に絞り込みが実行されるようにしたいです。

発生している問題・エラーメッセージ

一応絞り込みができるようになったのですがチェックボックスやラジオボタンを押した瞬間に絞り込まれてしまいます

該当のソースコード

HTML

1<form action="./" method="get" enctype="multipart/form-data"> 2 <div class="filter" id="js_filter"> 3              <dl> 4 <dt>家族構成</dt> 5 <dd class="family"> 6 <ul class="list-check clearfix filter-cond"> 7 <li> 8 <input type="checkbox" name="cat[fa][]" value="fa1" id="family01" > 9 <label for="family01" class="checkbox">子育て</label> 10 </li> 11 <li> 12 <input type="checkbox" name="cat[fa][]" value="fa2" id="family02" > 13 <label for="family02" class="checkbox">2世帯</label> 14 </li> 15 <li> 16 <input type="checkbox" name="cat[fa][]" value="fa3" id="family03" > 17 <label for="family03" class="checkbox">夫婦のみ</label> 18 </li> 19 <li> 20 <input type="checkbox" name="cat[fa][]" value="fa4" id="family04" > 21 <label for="family04" class="checkbox">ペット</label> 22 </li> 23 <li> 24 <input type="checkbox" name="cat[fa][]" value="fa5" id="family05" > 25 <label for="family05" class="checkbox">その他</label> 26 </li> 27 </ul> 28 </dd> 29 </dl> 30 31 <dl> 32 <dt>延床面積</dt> 33 <dd class="size"> 34 <ul class="list-check clearfix filter-cond"> 35 <li> 36 <input type="radio" name="cat[tfa][]" value="tfa1" id="space01" > 37 <label for="space01" class="radio">〜30坪</label> 38 </li> 39 <li> 40 <input type="radio" name="cat[tfa][]" value="tfa2" id="space02" > 41 <label for="space02" class="radio">30〜40坪</label> 42 </li> 43 <li> 44 <input type="radio" name="cat[tfa][]" value="tfa3" id="space03" > 45 <label for="space03" class="radio">40〜50坪</label> 46 </li> 47 <li> 48 <input type="radio" name="cat[tfa][]" value="tfa4" id="space04" > 49 <label for="space04" class="radio">50坪〜</label> 50 </li> 51 </ul> 52 </dd> 53 </dl> 54 <dl> 55 <dt>カラー</dt> 56 <dd class="color"> 57 <ul class="list-check clearfix filter-cond"> 58 <li> 59 <input type="radio" name="cat[co][]" value="co1" id="color01" > 60 <label for="color01" class="radio">クリア</label> 61 </li> 62 <li> 63 <input type="radio" name="cat[co][]" value="co2" id="color02" > 64 <label for="color02" class="radio">ナチュラル</label> 65 </li> 66 <li> 67 <input type="radio" name="cat[co][]" value="co3" id="color03" > 68 <label for="color03" class="radio">ホワイト</label> 69 </li> 70 <li> 71 <input type="radio" name="cat[co][]" value="co4" id="color04" > 72 <label for="color04" class="radio">ミディアム</label> 73 </li> 74 <li> 75 <input type="radio" name="cat[co][]" value="co5" id="color05" > 76 <label for="color05" class="radio">エボニー</label> 77 </li> 78 <li> 79 <input type="radio" name="cat[co][]" value="co6" id="color06" > 80 <label for="color06" class="radio">ダーク</label> 81 </li> 82 <br> 83 <li> 84 <input type="radio" name="cat[co][]" value="co7" id="color07" > 85 <label for="color07" class="radio">ブラック</label> 86 </li> 87 <li> 88 <input type="radio" name="cat[co][]" value="co8" id="color08" > 89 <label for="color08" class="radio">チェリー</label> 90 </li> 91 <li> 92 <input type="radio" name="cat[co][]" value="co9" id="color09" > 93 <label for="color09" class="radio">オリジナル</label> 94 </li> 95 96 </ul> 97 </dd> 98 </dl> 99 </div> 100 </div> 101 <button id="filterBtn">上記の条件で検索する</button> 102 </form> 103 104<section class="works_list"> 105 <div class="contentWrap"> 106 107 <ul class="filter-items"> 108 109 <li data-filter-key="fa3 fa4 tha3 th1 th2 th3 th4 th5 th6 ta5 ho5 co5"> 110 <a href="#"> 111 <div class="imgBox"><figure><img src=""></figure></div> 112 <div class="cont"> 113 <h3>の家</h3> 114 <p>夫婦のみ | ペット | 2階 | 40〜50坪 | 吹抜け | ロフト | リビング | インテリア | 収納 | 家事動線 | 融合 | スポーツ | エボニー</p> 115 </div> 116 </a> 117 </li> 118 <li data-filter-key="fa1 tfa3 th1 th2 th3 th4 th5 th6 ta5 co6"> 119 <a href="#"> 120 <div class="imgBox"><figure><img src=""></figure></div> 121 <div class="cont"> 122 <h3>の家</h3> 123 <p>子育て | 2階 | 40〜50坪 | 吹抜け | ロフト | リビング | インテリア | 収納 | 家事動線 | 融合 | ダーク</p> 124 </div> 125 </a> 126 </li> 127 <li data-filter-key="tfa3 th1 th3 th4 th5 th6 ta5 co4"> 128 <a href="#"> 129 <div class="imgBox"><figure><img src=""></figure></div> 130 <div class="cont"> 131 <h3>の家</h3> 132 <p>2階 | 40〜50坪 | 吹抜け | リビング | インテリア | 収納 | 家事動線 | 融合 | ミディアム</p> 133 </div> 134 </a> 135 </li> 136 137 <li data-filter-key="fa1 tfa2 th1 th2 th3 th4 th5 th6 ta1 co7"> 138 <a href="#"> 139 <div class="imgBox"><figure><img src=""></figure></div> 140 <div class="cont"> 141 <h3>の家</h3> 142 <p>子育て | 2階 | 30〜40坪 | 吹抜け | ロフト | リビング | インテリア | 収納 | 家事動線 | 和 | ブラック</p> 143 </div> 144 </a> 145 </li> 146 147 </ul> 148 </div> 149</section>

CSS

1.is-hide { 2 display: none; 3 }

JavaScript

1var searchBox = '.search-box'; 2 var listItem = '.list_item'; 3 var hideClass = 'is-hide'; 4 var filterBtn = document.getElementById('filterBtn'); 5 6 $(function() { 7 $(document).on('change', searchBox + ' input', function() { 8 search_filter(); 9 }); 10 }); 11 12 function search_filter() { 13 $(listItem).removeClass(hideClass); 14 for (var i = 0; i < $(searchBox).length; i++) { 15 var name = $(searchBox).eq(i).find('input').attr('name'); 16 var searchData = get_selected_input_items(name); 17 if(searchData.length === 0 || searchData[0] === '') { 18 continue; 19 } 20 for (var j = 0; j < $(listItem).length; j++) { 21 var itemData = get_setting_values_in_item($(listItem).eq(j), name); 22 var check = array_match_check(itemData, searchData); 23 if(!check) { 24 $(listItem).eq(j).addClass(hideClass); 25 } 26 } 27 } 28 } 29 30 function get_selected_input_items(name) { 31 var searchData = []; 32 $('[name=' + name + ']:checked').each(function() { 33 searchData.push($(this).val()); 34 }); 35 return searchData; 36 } 37 38 function get_setting_values_in_item(target, data) { 39 var itemData = target.data(data); 40 if(!Array.isArray(itemData)) { 41 itemData = [itemData]; 42 } 43 return itemData; 44 } 45 46 function array_match_check(arr1, arr2) { 47 var arrCheck = false; 48 for (var i = 0; i < arr1.length; i++) { 49 if(arr2.indexOf(arr1[i]) >= 0) { 50 arrCheck = true; 51 break; 52 } 53 } 54 return arrCheck; 55 } 56 57 filterBtn.addEventListener('click', filter);

試したこと

onclick()で囲えばできるかと思いましたができませんでした。
上記のように変更したら反応しなくなってしまいました。
一つの記事に複数の検索条件を指定する方法もありましたら教えていただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

サーバー側のプログラムで絞り込みをしないと、最初から膨大の量のデータを
HTML上に保持することになるので非現実的です

投稿2020/08/21 05:50

yambejp

総合スコア114839

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

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

spraut

2020/08/21 06:18

回答ありがとうございます 記事の内容をデータベース等で管理して必要に応じて表示したほうがいいということでしょうか?
yambejp

2020/08/21 06:24 編集

例がカラーしかないのでこちらとしては判断できませんが 膨大なデータから絞り込んだデータを表示したいのではないのでしょうか? 基本的には ・DBでデータ管理し絞り込み ・ページ内表示数を決め、ページネーションもしくは無限スクロール
spraut

2020/08/21 06:30 編集

検索のカテゴリとしてはテーマや趣味など6種類ほどあります ラジオボタンで一つしか選択できないカテゴリや、チェックボックスを使って複数選択できるカテゴリも作りたい感じです 今は記事の件数が少ないのもありHTMLに記事を直接書いて表示・非表示をしようとしています 将来のことも考えるとDBを利用したほうがいいんですね ご丁寧にありがとうございます
yambejp

2020/08/21 06:32

とりあえず全件表示の方針ですね。 カテゴリ同士はand検索のチェックボックスですか? 例えば「赤い」「りんご」を選んで、 「赤いリンゴ」の表示したいか、「赤い」または「りんご」を 表示させたいか仕様を決める必要があります。
spraut

2020/08/21 06:40

カテゴリ同士はand検索をしたいと思っています ちなみにカテゴリ同士はand検索、同一カテゴリ内ではor検索 のようにすることもできるのでしょうか?(今回その予定はございませんが…)
yambejp

2020/08/21 06:50

そういうUIを作れば、絞り込みの機能自体は さほど複雑では無いと思います
spraut

2020/08/21 06:58

UI次第でできるんですね。ありがとうございます。今度調べてみます DBは置いておいて上記のようにHTMLで絞り込みを行おうとして 動かない理由はわかりますか…?
spraut

2020/08/21 08:01

まさに理想の動きです!ありがとうございます! ソースコードを付け足したのですが、yambejpさんのサンプルにどのように入れたら 複数カテゴリの絞り込みができますでしょうか…? また、ラジオボタンとチェックボックスで記述に違いはございますか?
yambejp

2020/08/21 09:02 編集

codepen更新しました。 flgを順に配列にいれて、falseがないことをチェックすることにしました
spraut

2020/08/24 02:36

本当にありがとうございます。おかげさまでやりたかった動きが実装できました! チェックボックスの項目をquerySelectorAll、ラジオボタンの項目をquerySelectorで宣言して if文を追加したら絞り込まれる項目を増やすことができる、という認識で合っていますか? その場合、宣言する順番はソースコードに記述した順番でなければならないのでしょうか? コメントを送信したつもりで送信できていませんでした。ご丁寧に回答頂いたのに返信が遅くなってしまい申し訳ございません
yambejp

2020/08/24 02:41 編集

> if文を追加したら絞り込まれる項目を増やすことができる そうですね > 宣言する順番はソースコードに記述した順番 順番には依存しません。 ・チェックボックスのときはlengthを数えて1以上であることをチェック ・ラジオボタンのときはnullでないことをチェックする
spraut

2020/08/24 03:11

ありがとうございます!無事に項目を増やすこともできました! 拙い質問にこんなに丁寧にわかりやすく答えてくださりありがとうございました チェックボックスとラジオボタンの入力されているかの確認の条件もとてもわかりやすく勉強になりました こちらで教えて頂いたコードを参考にしつつ、DBを利用した検索についても調べてみようと思います 本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問