複数のセレクトボックスで選択した内容で、リストの絞り込みを行いたいです。
参考にしたのは下記ページです。
セレクトボックスで同様の絞り込みを実現させたいのですが、変更方法がよく分かっていません。
https://www.tam-tam.co.jp/tipsnote/javascript/post14636.html
よろしくお願いいたします。
まず選択しているオプションのvalue値が取得できないです。
<form> <div class="filterBox"> <div class="search-box"> <span>生地厚み</span> <select name="oz"> <option value="">すべて</option> <option value="4oz">~4オンス</option> <option value="4-6oz">4.1~6オンス</option> <option value="6-8oz">6.1~8オンス</option> </select> </div> <div class="search-box"> <span>価格帯</span> <select name="yen"> <option value="">すべて</option> <option value="99yen">~99円</option> <option value="100-199yen">100~199円</option> <option value="200-299yen">200~299円</option> <option value="300-399yen">300~399円</option> <option value="400-499yen">400~499円</option> <option value="500yen">500円以上</option> </select> </div> <div class="search-box"> <span>形状</span> <select name="type"> <option value="">すべて</option> <option value="flat">マチなし</option> <option value="ship-bottom">マチあり</option> <option value="other">その他</option> </select> </div> </div> </form> <ul class="list"> <li class="list_item" data-oz="4oz" data-yen="99yen" data-type="flat"> <img src="aaa"> </li> <li class="list_item" data-oz="4oz" data-yen="100-199yen" data-type="flat"> <img src="bbb"> </li> ・ ・ ・ </ul> <script> var searchBox = '.search-box'; // 絞り込む項目を選択するエリア var listItem = '.list_item'; // 絞り込み対象のアイテム var hideClass = 'is-hide'; // 絞り込み対象外の場合に付与されるclass名 $(function() { // 絞り込み項目を変更した時 $(document).on('change', '.search-box select', function() { search_filter(); }); }); //リストの絞り込みを行う function search_filter() { // 非表示状態を解除 $(listItem).removeClass(hideClass); for (var i = 0; i < $('.search-box select').length; i++) { var name = $('.search-box select').eq(i).attr('name'); // 選択されている項目を取得 var searchData = get_selected_input_items(name); // 選択されている項目がない、またはALLを選択している場合は飛ばす if(searchData.length === 0 || searchData[0] === '') { continue; } // リスト内の各アイテムをチェック for (var j = 0; j < $(listItem).length; j++) { // アイテムに設定している項目を取得 var itemData = $(listItem).eq(j).data(name); // 絞り込み対象かどうかを調べる if(searchData.indexOf(itemData) === -1) { $(listItem).eq(j).addClass(hideClass); } } } } //選択されているoptionのvalue属性の値 function get_selected_input_items(name) { var searchData = []; $('[name=' + name + ']:checked').each(function() { searchData.push($('[name="name"] option:selected').val()); }); return searchData; } </script>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/24 08:46
2018/10/24 09:53
2018/10/24 10:38
2018/10/24 11:44