前提・実現したいこと
初学者です。
radioボタンがクリックされた時に、要素を持っていないcheckboxボタンを非表示にしたいです。
よろしくお願いします。
該当のソースコード
HTML
1 <form> 2 <div class="search-box"> 3 <span class="search-box_label">種類:</span> 4 <input type="radio" name="kind" value="野菜">野菜 5 <input type="radio" name="kind" value="果物">果物 6 </div> 7 8 <div class="search-box"> 9 <span class="search-box_label">色:</span> 10 <input type="checkbox" name="color" value="白色">白色 11 <input type="checkbox" name="color" value="赤色">赤色 12 <input type="checkbox" name="color" value="緑色">緑色 13 <input type="checkbox" name="color" value="黄色">黄色 14 <input type="checkbox" name="color" value="紫色">紫色 15 </div> 16 </form> 17 18 <ul class="list"> 19 <li class="list_item" data-kind="果物" data-color="赤色">苺 種類: 果物 色: 赤色</li> 20 <li class="list_item" data-kind="野菜" data-color="黄色">かぼちゃ 種類: 野菜 色: 黄色</li> 21 <li class="list_item" data-kind="野菜" data-color="緑色">キャベツ 種類: 野菜 色: 緑色</li> 22 <li class="list_item" data-kind="果物" data-color="赤色">さくらんぼ 種類: 果物 色: 赤色</li> 23 <li class="list_item" data-kind="野菜" data-color="緑色">すいか 種類: 野菜 色: 緑色</li> 24 <li class="list_item" data-kind="野菜" data-color="紫色">茄子 種類: 野菜 色:紫色 </li> 25 <li class="list_item" data-kind="果物" data-color="緑色">キウイ 種類: 果物 色: 緑色</li> 26 <li class="list_item" data-kind="果物" data-color="黄色">バナナ 種類: 果物 色: 黄色</li> 27 <li class="list_item" data-kind="果物" data-color="白色">梨 種類: 果物 色: 白色</li> 28 <li class="list_item" data-kind="野菜" data-color="緑色">メロン 種類: 野菜 色: 緑色</li> 29 <li class="list_item" data-kind="果物" data-color="赤色">りんご 種類: 果物 色: 赤色</li> 30 <li class="list_item" data-kind="果物" data-color="黄色">レモン 種類: 果物 色:黄色 </li> 31 </ul> 32 33
CSS
1.search-box_label { 2 font-weight: bold; 3} 4.is-hide { 5 display: none; 6}
javascript
1 2$(function() { 3 $(".label").click(function() { 4 $(".list li").removeClass("list_toggle"); 5 }); 6 if ($(".list li").hasClass("list_toggle")) { 7 $(".reset .reset-button").click(function() { 8 $(".list li").addClass("list_toggle"); 9 }); 10 } 11}); 12 13$(function () { 14 $('input[type=radio]').click(function () { 15 if ($(this).prop('checked')) { 16 $(".list li").removeClass("list_toggle"); 17 } else { 18 $(".list li").addClass("list_toggle"); 19 } 20 }); 21}); 22 23var searchBox = ".search-box"; // 絞り込む項目を選択するエリア 24var listItem = ".list_item"; // 絞り込み対象のアイテム 25var hideClass = "is-hide"; // 絞り込み対象外の場合に付与されるclass名 26 27$(function() { 28 // 絞り込み項目を変更した時 29 $(document).on("change", searchBox + " input", function() { 30 search_filter(); 31 }); 32}); 33 34/** 35 * リストの絞り込みを行う 36 */ 37function search_filter() { 38 // リスト内の各アイテムをチェック 39 let noCheckItem = true; // 何れもチェックされていないかチェック 40 for (let j = 0; j < $(listItem).length; j++) { // リストアイテムの数より小さい間 41 let hitItem = true; // 検索対象 42 for (let i = 0; i < $(searchBox).length; i++) { 43 let name = $(searchBox) 44 .eq(i) 45 .find("input") 46 .attr("name"); 47 // 選択されている項目を取得 48 let searchData = get_selected_input_items(name); 49 // 選択されている項目がない、またはALLを選択している場合は飛ばす 50 if (searchData.length === 0 || searchData[0] === "") { 51 hitItem &= true; // 何もチェックされていなかったら検索絞込から外す 52 continue; 53 } 54 noCheckItem = false; // 何れかチェックされている 55 // アイテムに設定している項目を取得 56 let itemData = $(listItem) 57 .eq(j) 58 .data(name); 59 // 絞り込み対象かどうかを調べる 60 hitItem &= (searchData.indexOf(itemData) !== -1) 61 } 62 63// 各labelをand条件に設定する 64 if (hitItem && !noCheckItem) { 65 $(listItem) 66 .eq(j) 67 .removeClass(hideClass); 68 } else { 69 $(listItem) 70 .eq(j) 71 .addClass(hideClass); 72 } 73 } 74} 75 76function get_selected_input_items(name) { 77 var searchData = []; 78 $("[name=" + name + "]:checked").each(function() { 79 searchData.push($(this).val()); 80 }); 81 return searchData; 82}
試したこと
下記を書いてみたところ、正しく動作しませんでした。
javascript
1$(function(){ 2 $('input[type=radio]').click(function(){ 3 if($('input[type=checkbox]').prop("checked")){ 4 $(".list li").removeClass("list_toggle"); 5 }else{ 6 $(".list li").addClass("list_toggle"); 7 } 8 }); 9});
補足情報
下記サイトを引用しました
https://www.tam-tam.co.jp/tipsnote/javascript/post14636.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/08 17:56