前提・実現したいこと
HTML,javascriptを使って、ぐるなびのような飲食店検索のサイトを作成しているのですが、
例えば、 ・貝類 ・光物 ・白身 ・赤身
の4項目でチェックボックスがあります。
選んだ項目の品物が表示されます。
これを仮にマグロが 「赤身」と 「貝類」の2つの項目を満たすものとして
data-filter-key を赤身、貝類の2つにして
赤身を選択した場合と貝類を選択した場合、またはどちらも選択した場合にも
マグロを表示させたいのですが、どうしたらいいかわかりません。
よろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
html
1 <style> 2[data-filter-view]:not([data-filter-view=""]) [data-filter-key] { 3 display: none; 4} 5[data-filter-view][data-filter-view~="貝類"] [data-filter-key="貝類"], 6[data-filter-view][data-filter-view~="光物"] [data-filter-key="光物"], 7[data-filter-view][data-filter-view~="白身"] [data-filter-key="白身"], 8[data-filter-view][data-filter-view~="赤身"] [data-filter-key="赤身"] { 9 display: block; 10} 11</style> 12 13<div class="filter" id="js-filter"> 14<ul class="filter-cond"> 15<li><label><input type="checkbox" value="貝類">貝類</label></li> 16<li><label><input type="checkbox" value="光物">光物</label></li> 17<li><label><input type="checkbox" value="白身">白身</label></li> 18<li><label><input type="checkbox" value="赤身">赤身</label></li> 19<!-- /.filter-cond --></ul> 20 21<ul class="filter-items"> 22<li data-filter-key="貝類">つぶ貝</li> 23<li data-filter-key="白身">カンパチ</li> 24<li data-filter-key="赤身">マグロ</li> 25<li data-filter-key="光物">コハダ</li> 26<li data-filter-key="貝類">バイ貝</li> 27<li data-filter-key="白身">マダイ</li> 28<li data-filter-key="貝類">サザエ</li> 29<!-- /.filter-items --></ul> 30<!-- /#js-filter--></div> 31 32 33●Javascript 34var widget = document.getElementById('js-filter'); 35var checkboxes = widget.querySelectorAll('.filter-cond input[type="checkbox"]'); 36var checkedList = []; 37var i = 0; 38var leng = 0; 39var filter = function () { 40 checkedList = []; 41 42 i = 0; 43 leng = checkboxes.length; 44 45 for (i; i < leng; i++) { 46 if (checkboxes[i].checked) { 47 checkedList.push(checkboxes[i].value); 48 } 49 } 50 51 widget.setAttribute('data-filter-view', checkedList.join(' ')); 52}; 53 54 55i = 0; 56leng = checkboxes.length; 57 58for (i; i < leng; i++) { 59 checkboxes[i].addEventListener('change', filter); 60} 61 62 63 64### 補足情報(FW/ツールのバージョンなど) 65 66ここにより詳細な情報を記載してください。