UnderScoreとJSONを使用し、セレクトボックスとチェックボックスの絞り込み検索を作成しようと思っています。
下記を参考に作成したのですが、「gakusei」と「age」のような複数配列の場合の記述方法がわかりません。
https://teratail.com/questions/143434
検索方法は「gakusei」・「age」・「pref」のand検索です。
■html
<select id="gakusei" name="gakusei"> <option value="">-- 未選択 --</option> <option value="小学">小学</option> <option value="中学">中学</option> <option value="高校">高校</option> </select> <select id="age" name="age"> <option value="">-- 未選択 --</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> </select> <select id="pref" name="pref"> <option value="">-- 未選択 --</option> <option value="関東">関東</option> <option value="関西">関西</option> </select>
■JS
$(function() { function outputResults(results) { // 変数の初期化 var html = ''; // 受け取った配列をループで処理 // 出力するHTMLの整形 $.each(results, function() { html += '<div class="item">'; html += this.name; html += '</div>'; }); // HTMLに出力 $('#items').empty().append(html); } var items = [ { "gakusei" :[ "小学", "中学", ], "age" :[ "11", "12", "13", "14", "15", ], "pref" : "関東", }, { "gakusei" :[ "中学", "高校", ], "age" :[ "13", "14", "15", "16", "17", "18" ], "pref" : "関西", }, // ページ読み込み時はすべてのアイテムを出力する outputResults(items); // 検索が押された時の処理 $('#search').on('submit' , function(event){ // デフォルトのイベントをキャンセル event.preventDefault(); // 検索項目のオブジェクトを作成してセレクトボックスの値を格納 var query = {}; if($('#gakusei').val() != ''){ query.gakusei= $('#gakusei').val(); } if($('#age').val() != ''){ query.age= $('#age').val(); } if($('#sex').val() != ''){ query.sex = $('#sex').val(); } // データの中から一致するオブジェクトを検索 var results = _.filter(items, query ); console.log(results); // 返ってきた配列で出力処理 outputResults(results); }); });
例えば
"gakusei" :[ "小学", "中学", ],
が
"gakusei" :"小学",
だと表示されますが、複数だと検索結果が表示されません。
未熟なためどう記述すればよいのかわからないため、
どなたかご教示いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー