前提・実現したいこと
記事の一覧ページを作っていて、チェックボックスやラジオボタンを選択することで
記事を絞り込めるようにしたいです。
また、チェックを入れた瞬間にではなく検索ボタンを押した時に絞り込みが実行されるようにしたいです。
発生している問題・エラーメッセージ
一応絞り込みができるようになったのですがチェックボックスやラジオボタンを押した瞬間に絞り込まれてしまいます
該当のソースコード
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()で囲えばできるかと思いましたができませんでした。
上記のように変更したら反応しなくなってしまいました。
一つの記事に複数の検索条件を指定する方法もありましたら教えていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 06:18
2020/08/21 06:24 編集
2020/08/21 06:30 編集
2020/08/21 06:32
2020/08/21 06:40
2020/08/21 06:50
2020/08/21 06:58
2020/08/21 07:35
2020/08/21 08:01
2020/08/21 09:02 編集
2020/08/24 02:36
2020/08/24 02:41 編集
2020/08/24 03:11