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

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

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

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2512閲覧

js初心者です。ラジオボタンで表示・非表示

SatokoKugo

総合スコア20

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/02/22 03:43

前提・実現したいこと

ラジオボタンが5つあり、Aを選択するとAを表示してその他を非表示という作業をしています。

作業としてはうまくいってるのですが、5項目となるともっと楽な書き方があるのでは・・・と思いました。

該当のソースコード

html

1<table> 2 <tr> 3 <th></th> 4 <td> 5 <label><input type="radio" name="status" onclick="register();" checked="checked">ほげ1の場合</label> 6 <label><input type="radio" name="status" onclick="register();">ほげ2の場合</label> 7 </td> 8 </tr> 9</table> 10 11<!--表示非表示の切り替え--> 12<div id="hoge1_form"> 13 <table class="form_table"> 14 <tr> 15 <th>ほげ1</th> 16 <td><input type="text" /></td> 17 </tr> 18 </table> 19</div> 20 21<!--表示非表示の切り替え--> 22<div id="hoge2_form"> 23 <table class="form_table"> 24 <tr> 25 <th>ほげ2</th> 26 <td><input type="text" /></td> 27 </tr> 28 </table> 29</div> 30

js

1function register() { 2 radio = document.getElementsByName('status'); 3 if (radio[0].checked) { 4 document.getElementById('hoge1_form').style.display = ""; 5 document.getElementById('hoge2_form').style.display = "none"; 6 } else if (radio[1].checked) { 7 document.getElementById('hoge1_form').style.display = "none"; 8 document.getElementById('hoge2_form').style.display = ""; 9 } 10} 11

他に試したいこと

ボタン1つ選択して表示するだけでなく
2つ選択すると表示というバージョンも教えて頂けるとうれしいです。

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

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

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

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

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

kei344

2018/02/22 03:45

ラジオボタンは「2つ選択する」ができませんが、どのようなことをしたいのでしょうか。
SatokoKugo

2018/02/22 05:36

分かりにくくすみませんでした。A項目でa~gのどれかを選択→B項目でh~pのどれかを選択→内容に合った本文表示 といった感じです。
guest

回答2

0

ベストアンサー

表示・非表示を切り替えたいタグの前にラジオボタンをおいて
スタイルシートで調整するのが楽です

CSS

1[name=status_x]{display:none;} 2[name=status_x]+div{display:none;} 3[name=status_x]:checked+div{display:block;}

javascript

1document.addEventListener('change',function(e){ 2 var t=e.target; 3 if(t.name=="status") document.querySelector('#'+t.value).checked=true; 4});
<div> <label><input type="radio" name="status" value="hoge1" checked>ほげ1の場合</label> <label><input type="radio" name="status" value="hoge2">ほげ2の場合</label> <label><input type="radio" name="status" value="hoge3">ほげ3の場合</label> </div> <input type="radio" name="status_x" id="hoge1" checked> <div> <table class="form_table"> <tr> <th>ほげ1</th> <td><input type="text" /></td> </tr> </table> </div> <input type="radio" name="status_x" id="hoge2"> <div> <table class="form_table"> <tr> <th>ほげ2</th> <td><input type="text" /></td> </tr> </table> </div> <input type="radio" name="status_x" id="hoge3"> <div> <table class="form_table"> <tr> <th>ほげ3</th> <td><input type="text" /></td> </tr> </table> </div>

※微調整しました

投稿2018/02/22 04:20

編集2018/02/22 04:28
yambejp

総合スコア114814

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

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

SatokoKugo

2018/02/22 06:01

内容部分はテーブルでないと反応しないのでしょうか?
yambejp

2018/02/22 06:07

テーブルかどうかは関係ないと思いますが? CSSの表示はラジオボタンのチェック+divで判断しています
SatokoKugo

2018/02/22 06:28

出来ました!ありがとうございます!!
guest

0

タブ選択のようにしたいのだろうと思います。
病院の問診票にも「女性の場合は妊娠中か否かをお書き下さい」みたいな、特定条件下の方は追加情報を記載する項目ありますからね。

これを参考にform要素を作ってそこから引っ掛けるようにすれば簡単に共通部品化出来るようになります
https://lab.syncer.jp/Web/JavaScript/Snippet/30/

HTML

1<td> 2 <form id="hoge"> 3 <label><input type="radio" name="status" value="hoge1" onclick="register();" checked="checked">ほげ1の場合</label> 4 <label><input type="radio" name="status" value="hoge2" onclick="register();">ほげ2の場合</label> 5 </form> 6</td>

JavaScript

1function register() { 2 // 関数内で初登場する変数は必ずvarを使って宣言してください、varを使わないとバグの原因になります 3 var selected = document.getElementById('hoge').status.value; 4 5 // 一旦全部非表示にしてから該当するものだけ有効にする 6 var items = ['hoge1_form', 'hoge2_form']; 7 for (var i = 0; i < items.length; i++) { 8 document.getElementsById(items[i]).style.display = "none"; 9 } 10 document.getElementById(selected + '_form').style.display = ""; 11}

こんな感じでいかがでしょうか?試してみて下さい。

投稿2018/02/22 04:14

miyabi-sun

総合スコア21158

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問