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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1326閲覧

【絞込機能】子要素が空の時、親要素を非表示にする

taotaol

総合スコア1

checkbox

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/10/08 14:59

前提・実現したいこと

初学者です。
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

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

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

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

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

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

guest

回答1

0

ベストアンサー

確認ですが、リストではなく、「チェックボックスを非表示」にしたいのですか?
掲載されているこちらのコードはチェックボックスを非表示にする操作はしていないですね。。。

各行にコメントをつけるとしたらこんな感じかなと思います。

javascript

1$(function(){ 2 $('input[type=radio]').click(function(){ // ラジオボタンがクリックされた 3 if($('input[type=checkbox]').prop("checked")){ // チェックがついているものが1つ以上あるか? 4 $(".list li").removeClass("list_toggle"); // あればリストの要素からlist_toggleクラスを除去 5 }else{ // チェックがついているものが一切ない 6 $(".list li").addClass("list_toggle"); // なければリストの要素にlist_toggleクラスを追加 7 } 8 }); 9});

もし、「選択している種類に存在しない色のチェックボックスを非表示にする(例えば野菜の場合、白色と赤色がないのでそれらのチェックボックスは非表示にしたい)」という意味であればこんな感じでPGを作るといけそうな気がします。

  1. 選択されている種類は何か調べる
  2. いったん、チェックボックスを全て非表示にする
  3. 選択された種類に該当するリストの要素を全て参照し、data-colorから色情報を取得する
  4. 3で取得した色情報と一致するチェックボックスを表示する

実際にコードにするとこんな感じかと。

javascript

1$(function() { 2 $('input[type=radio]').click(function(){ 3 // 野菜 or 果物? 4 const type = $(this).val() 5 // いったん全てを非表示にする 6 $(`input[type=checkbox]`).addClass('is-hide') 7 // リストを1つずつ参照する 8 $('.list li').each(function(idx, elem) { 9 if ($(elem).data('kind') !== type) { 10 return 11 } 12 // リストから色情報を取り出す 13 const color = $(elem).data('color') 14 // 該当するチェックボックス 15 $(`input[type=checkbox][value=${color}]`).removeClass('is-hide') 16 }) 17 }) 18})

このPGで、選択されている種類に存在しない色の「チェックボックス」を非表示にすることはできると思います。

が、おそらくこれだけでは望まれている結果は得られないのではないかと思います。後もう一工夫必要です。
初学者とのことなので、これ以上は一度ご自身で考えてみて、もしわからないようであればまた質問してみてください。

投稿2021/10/08 16:22

ukyoda

総合スコア386

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

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

taotaol

2021/10/08 17:56

丁寧なご回答ありがとうございます。 頂いたヒントをもとに再度考えてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問