質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Q&A

解決済

1回答

3071閲覧

JavaScript 絞り込み表示の項目を増やす

root2

総合スコア14

JavaScript

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

0グッド

0クリップ

投稿2018/11/07 00:38

前提・実現したいこと

https://www.tam-tam.co.jp/tipsnote/javascript/post14636.html
上の「3. 配列を使ってリスト側に複数の値を設定できるようにする」を参考にして
javascriptで絞り込みの表示を作成しております。

例:
項目1【タイプ】 カットソー ワンピース スカート
項目2【色】 赤 黄色 青 緑
項目3【サイズ】 S M L

各項目にチェックを入れると商品のリストから該当するものだけが表示されます。
項目1のみがラジオボタンで1つしか選択できないもの、他の項目はチェックボタンでいくつでも選択できるようにしたいです。

発生している問題・エラーメッセージ

JavaScript初心者です。 参考資料は、項目1と項目2しかないため、自力で項目3を増やすことができません。 ご教授のほどよろしくお願いいたします。

該当のソースコード

var searchBox = '.search-box'; // 絞り込む項目を選択するエリア var listItem = '.list_item'; // 絞り込み対象のアイテム var hideClass = 'is-hide'; // 絞り込み対象外の場合に付与されるclass名 $(function() { // 絞り込み項目を変更した時 $(document).on('change', searchBox + ' input', function() { search_filter(); }); }); /** * リストの絞り込みを行う */ function search_filter() { // 非表示状態を解除 $(listItem).removeClass(hideClass); for (var i = 0; i < $(searchBox).length; i++) { var name = $(searchBox).eq(i).find('input').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 = get_setting_values_in_item($(listItem).eq(j), name); // 絞り込み対象かどうかを調べる var check = array_match_check(itemData, searchData); if(!check) { $(listItem).eq(j).addClass(hideClass); } } } } /** * inputで選択されている値の一覧を取得する * @param {String} name 対象にするinputのname属性の値 * @return {Array} 選択されているinputのvalue属性の値 */ function get_selected_input_items(name) { var searchData = []; $('[name=' + name + ']:checked').each(function() { searchData.push($(this).val()); }); return searchData; } /** * リスト内のアイテムに設定している値の一覧を取得する * @param {Object} target 対象にするアイテムのjQueryオブジェクト * @param {String} data 対象にするアイテムのdata属性の名前 * @return {Array} 対象にするアイテムのdata属性の値 */ function get_setting_values_in_item(target, data) { var itemData = target.data(data); if(!Array.isArray(itemData)) { itemData = [itemData]; } return itemData; } /** * 2つの配列内で一致する文字列があるかどうかを調べる * @param {Array} arr1 調べる配列1 * @param {Array} arr2 調べる配列2 * @return {Boolean} 一致する値があるかどうか */ function array_match_check(arr1, arr2) { // 絞り込み対象かどうかを調べる var arrCheck = false; for (var i = 0; i < arr1.length; i++) { if(arr2.indexOf(arr1[i]) >= 0) { arrCheck = true; break; } } return arrCheck; }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

yambejp

2018/11/07 02:37

具体的に何をどうしたいかもっと明確に例示してください
guest

回答1

0

ベストアンサー

ソースを見る限り、Javascriptの修正をしなくても、項目3に対応出来ていると思います。
試しに、HTMLを以下のようにしてみて下さい。きっと項目3で絞り込まれると思います。

html

1<form> 2 <div class="search-box"> 3 <span class="search-box_label">種類:</span> 4 <input type="radio" name="kind" value="">ALL 5 <input type="radio" name="kind" value="野菜">野菜 6 <input type="radio" name="kind" value="果物">果物 7 </div> 8 9 <div class="search-box"> 10 <span class="search-box_label">色:</span> 11 <input type="checkbox" name="color" value="赤色">赤色 12 <input type="checkbox" name="color" value="緑色">緑色 13 <input type="checkbox" name="color" value="黄色">黄色 14 </div> 15 16 <div class="search-box"> 17 <span class="search-box_label">サイズ:</span> 18 <input type="checkbox" name="size" value="S">S 19 <input type="checkbox" name="size" value="M">M 20 <input type="checkbox" name="size" value="L">L 21 </div> 22</form> 23 24<ul class="list"> 25 <li class="list_item" data-kind="野菜" data-color="赤色" data-size="S">いちご 種類: 野菜 色: 赤色</li> 26 <li class="list_item" data-kind="野菜" data-color="黄色" data-size="S">かぼちゃ 種類: 野菜 色: 黄色</li> 27 <li class="list_item" data-kind="野菜" data-color="緑色" data-size="S">キャベツ 種類: 野菜 色: 緑色</li> 28 <li class="list_item" data-kind="果物" data-color="赤色" data-size="S">さくらんぼ 種類: 果物 色: 赤色</li> 29 <li class="list_item" data-kind="野菜" data-color="緑色" data-size="S">すいか 種類: 野菜 色: 緑色</li> 30 <li class="list_item" data-kind="果物" data-color="緑色" data-size="S">キウイ 種類: 果物 色: 緑色</li> 31 <li class="list_item" data-kind="果物" data-color="黄色" data-size="S">バナナ 種類: 果物 色: 黄色</li> 32 <li class="list_item" data-kind="野菜" data-color="緑色" data-size="S">メロン 種類: 野菜 色: 緑色</li> 33 <li class="list_item" data-kind="果物" data-color="赤色" data-size="M">りんご 種類: 果物 色: 赤色</li> 34 <li class="list_item" data-kind="果物" data-color="黄色" data-size="L">レモン 種類: 果物 色:黄色 </li> 35</ul>

投稿2018/11/07 03:58

teramon3333

総合スコア102

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

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

root2

2018/11/07 04:14

ご提示いただいたHTMLで問題なく動作しました。 自分でHTMLを変更した時にうまくいかなかったので、JSの変更が必要なのだと思い込んでおりました。 ご教授いただき、誠にありがとうござました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問