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

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

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

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

HTML

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

Q&A

解決済

2回答

8227閲覧

checkboxのクリックで任意のdivの表示・非表示を切り替えたいです。

20200713

総合スコア16

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2021/05/30 10:41

編集2021/05/30 11:44

前提・実現したいこと

checkboxのクリックで任意のdivの表示・非表示を切り替えたいです。
以下のように設定してみましたがうまく切り替えられず、
間違っている部分などございましたらご指摘いただけたら幸いです。

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

チェックボックスをクリックしても該当のdiv部分が非表示にならない上、
チェックボックスのチェックも切り替わりません。

該当のソースコード

html

1<input type="checkbox" id="checkbox_1" checked="checked" onclick="click_display_div('checkbox_1','test')"> 2<label for="checkbox_1">checkbox1</label> 3 4<table> 5 <div id="test"> 6 <tr><p>tr1</p></tr> 7 <tr><p>tr2</p></tr> 8 </div> 9 <tr><p>tr3</p></tr> 10</table>

js

1function click_display_div(checkboxID, divID) { 2 var CB = document.getElementById(checkboxID); 3 var DIV = document.getElementById(divID); 4 if (CB.checked = true) { 5 DIV.style.display = none; 6 CB.checked = false; 7 } else { 8 DIV.style.display = block; 9 CB.checked = true; 10 } 11}

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

初歩的な問題で大変申し訳ございませんが、
何かアドバイスいただけましたら幸いです。

追記
コメントいただきました方法でも上記のコードでは機能しないのは、
テーブル内にdivを置くこと自体が間違っているのでしょうか。
任意のtr一つ一つの表示切り替えを行う部分が既にあるため、
今回のチェックボックスでは複数行をまとめて表示切り替えを行いたいです。

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

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

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

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

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

guest

回答2

0

ご参考までに、
この案件なら、jsを使わなくてもCSSだけで可能です。

html

1<input type="checkbox" id="checkbox_1" checked="checked"/> 2<label for="checkbox_1">checkbox1</label> 3<table> 4 <tr class="test"> 5 <td>tr1</td> 6 </tr> 7 <tr class="test"> 8 <td>tr2</td> 9 </tr> 10 <tr> 11 <td>tr3</td> 12 </tr> 13</table>

css

1#checkbox_1:checked ~ table tr.test { 2 display: none; 3}

一般兄弟結合子~ を使うのがミソです。

投稿2021/05/30 12:44

hatena19

総合スコア33782

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

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

20200713

2021/05/30 13:10

ご対応ありがとうございました! 参考にさせていただきます。
guest

0

ベストアンサー

修正点を箇条書きでお伝えします。

  • チェックボックスのチェックをつけ外しした際に関数を実行する場合は、onclickでなくonchangeです。
  • チェックボックスをクリックした時点でチェックボックスの値は変わるので、JSの6行目(CB.checked = false;)、9行目(CB.checked = true;)は不要です。
  • (4行目)CB.checkedがtrueかどうかを返したいときは、CB.checked == true;が正解です。(=は代入演算子です)
  • (5行目、8行目)none, blockは文字列ですので、''または""で括る必要があります。(括弧なしでnoneと書いてしまうと、noneという名前の変数という意味になってしまいます)

以上の点を修正して、ソースは下記のようになります。

HTML

1<input type="checkbox" id="checkbox_1" checked="checked" onchange="click_display_div('checkbox_1','test')"> 2<label for="checkbox_1">checkbox1</label> 3<div id="test"> 4 <p>test</p> 5</div>

JS

1function click_display_div(checkboxID, divID) { 2 var CB = document.getElementById(checkboxID); 3 var DIV = document.getElementById(divID); 4 if (CB.checked == true) { 5 DIV.style.display = 'none'; 6 } else { 7 DIV.style.display = 'block'; 8 } 9}

投稿2021/05/30 10:49

編集2021/05/30 10:55
hallen0225

総合スコア587

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

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

20200713

2021/05/30 11:40

不明だった点、的確にお教えいただき本当にありがとうございます! radioボタンもcheckboxもonclickで処理していたため、大変参考になりました…! 実際に実装を予定していた、表示を切り替えるdiv部分はテーブルの中に入っており、 そのようなコードの場合は切り替えができない状況です。 これは、テーブルの中にdivを置くこと自体間違っているのでしょうか。
hallen0225

2021/05/30 12:07 編集

おっしゃる通り、tableの中にdivを置くのはHTMLとして間違っています。(ブラウザで正しく処理されません) 今回は、代替案として、表示を切り替えたいtr要素にclass名を付ける方法で対応してみました。 (idは一つのページ内で重複しないようにする必要があるので。class名は、同じclass名の要素が複数あっても構いません) なお、tr要素の下には、p要素でなくtd要素(trは表の行、tdは表のセルのことです)が必要ですので、そちらも修正してあります。 (また、"CB"のような略語は、他の人が見たときに分かりづらい恐れがあるので、一般的な略称の「chkbox」に改めました。) コードは下記のようになります。 (コメント欄ではインデントが無視されてしまうため、見づらくなってしまいますがご容赦ください。) HTML <input type="checkbox" id="checkbox_1" checked="checked" onclick="click_display_div('checkbox_1','test')" /> <label for="checkbox_1">checkbox1</label> <table> <tr class="test"> <td>tr1</td> </tr> <tr class="test"> <td>tr2</td> </tr> <tr> <td>tr3</td> </tr> </table> JS function click_display_div(chkboxID, className) { var chkbox= document.getElementById(chkboxID); var tableRows = document.querySelectorAll("." + className); if (chkbox.checked == true) { tableRows.forEach((element) => (element.style.display = "none")); } else { tableRows.forEach((element) => (element.style.display = "block")); } }
20200713

2021/05/30 12:52

お返事いただきありがとうございます! trに既にクラスを指定していたため、複数クラスとしてtestも追加しましたところ、 表示のオンオフ切り替えによってテーブルの内容物の体裁が崩れてしまいました。 また、既にtrに割り振っているIDによって表示切り替えを別の箇所で行なっているのですが classによるオンオフとIDによるオンオフはどちらが優先されるなど順番はあるのでしょうか…? 重ねての質問申し訳ございません。 もしも可能でしたらご助言いただけましたら幸いです。
hallen0225

2021/05/30 13:00 編集

表示切替が複数種類あるとなるとまったく話が変わってきてしまいますね、、 処理としては、先に表示対象を絞り込んで、表示対象のtr要素にはdisplay:block、非表示のtr要素にはdisplay: noneを当てる、といったようなことになると思われます。 こうなってくると、申し訳ないのですが、実際の要件やHTMLソースが分からない以上具体的なことは申し上げられません。 >> classによるオンオフとIDによるオンオフはどちらが優先されるなど順番はあるのでしょうか…? これらは独立しているものではないので、全面的に「どう作るか」次第ということになると思われます。
20200713

2021/05/30 13:09

なるほどです。 詳しくお答えくださりありがとうございました! 表示切り替えが複数の場合について、指定方法をまた改めてご質問させていただきますので、 宜しければその際またご相談できましたら嬉しいです。 当初の質問内容については動作確認できましたので、 こちら一度解決とさせていただきます!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問