🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

Q&A

1回答

3168閲覧

Javascript でチェックボックスで複数選択した際に複数のキーワードのものを表示させたい。

usagi01

総合スコア0

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

0グッド

0クリップ

投稿2021/02/26 19:55

前提・実現したいこと

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ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/02/27 00:29

【```】で閉じられていないので、見にくいです。質問を修正してください。 今回なら↓こうです。【プレビューで確認】してから投稿/更新すると上手く行きますよ。 ```html <!-- HTMLコード --> ``` ```js // JavaScriptコード ``` で、考え方としては選択項目ごとに内部で赤貝みたいなものはサブデータ的に持たせて内容が一致するかどうかですかね。
kei344

2021/03/01 04:28

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答1

0

選択リストをちょっと減らしちゃいましたがこういう事でしょうか。

html

1<ul class="filter-items"> 2 <li data-filter-key="貝類">つぶ貝</li> 3 <li data-filter-key="白身">カンパチ</li> 4 <li data-filter-key="赤身 貝類">マグロ</li> 5 <!-- 6 <li data-filter-key="光物">コハダ</li> 7 <li data-filter-key="貝類">バイ貝</li> 8 <li data-filter-key="白身">マダイ</li> 9 <li data-filter-key="貝類">サザエ</li> 10 --> 11 <!-- /.filter-items --> 12</ul>

イメージ説明

ここが役立ちました。
https://teratail.com/questions/143816

今回だと、data-filter-keyが完全一致指定(=指定)になっていたので、
部分一致指定(~=指定)に書き換えましたという事になります。

マグロ貝類でも表示する場合はこうなります。

style部分
[data-filter-key="貝類"][data-filter-key~="貝類"]

html部分
<li data-filter-key="赤身">マグロ</li><li data-filter-key="赤身 貝類">マグロ</li>

投稿2021/02/27 01:18

編集2021/02/27 01:20
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

usagi01

2021/02/28 16:37

ありがとうございます! まさに、こちらで解決しました。 本当にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問