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

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

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

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

Q&A

解決済

3回答

1176閲覧

Javascriptでradioボタンを押した時に選択分岐で表示を変えたい

H-A-C

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/02/03 00:59

編集2021/02/03 02:09

前提・実現したいこと

WordpressのContactform7でフォームを作成しています。
その中でradioボタンを使った選択分岐を行っているのですが、選択したradioボタンによって『<div id="output"></div>』のところに別のタグを表示させようとしております。
その際、document.write()や.insertAdjacentHTML()では思ったような表示とならなかったため.innerHTMLを使用してみたのですが、全く動作していないような状況です。

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

エラーは出ませんが、表示もでません・・・

該当のソースコード

HTML

1<form name="cf7" class="wpcf7-form init"> 2***色々処理*** 3<ul> 4 <li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢1" checked="checked" /><span>選択肢1</span></label><li> 5 <li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢2" /><span>選択肢2</span></label><li> 6 <li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢3" /><span>選択肢3</span></label><li> 7</ul> 8<div id="output"></div> 9***色々処理*** 10</form>

Javascript

1<div id="output"></div> 2<script> 3 function myCheck() { 4 var flag = false; 5 var id = document.getElementById("output"); 6 for(var i=0; i<document.cf7.aaaa.length;i++){ 7 if(document.cf7.aaaa[i].checked){ 8 flag = true; 9 if(cf7.aaaa[i].value == "選択肢1"){ 10 id.innerHTML = '表示したい箇所'; 11 } 12 else if(cf7.aaaa[i].value == "選択肢2"){ 13 id.innerHTML = '表示したい箇所'; 14 } 15 else if(cf7.aaaa[i].value == "選択肢3"){ 16 id.innerHTML = '表示したい箇所'; 17 } 18 } 19 } 20 } 21</script>

試したこと

document.write()では新規ページ(上書き?)となってしまい、.insertAdjacentHTML()では表示するものの別のラジオボタンを押すと追記されて2行3行と増えてしまいました。
そこで.innerHTMLを使ってみたのですが全く動作しておりません。

表示したいものを先に非表示としておき、選択したものに合わせて表示に切り替える方法も考えましたが、フォームのデータをCSVに吐き出した時に非表示の部分もすべてCSVに取り込まれてしまうため、表示/非表示の方法は諦めました。

今後の勉強のためにも皆さまのお知恵をお借りできれば幸いです。
お手数おかけいたしますが、よろしくお願いいたします。

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

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

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

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

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

int32_t

2021/02/03 02:24

「表示もでません・・・」というのは、ラジオボタンをクリックしても <div id="output"> 内に '表示したい箇所' が表示されない、ということでしょうか? 現状のコードで、ロード時は表示されませんがクリックすれば動きそうですけどね。
H-A-C

2021/02/03 02:30

>「表示もでません・・・」というのは、ラジオボタンをクリックしても <div id="output"> 内に '表示したい箇所' が表示されない、ということでしょうか? はい、その通りです。 ラジオボタンをクリックしても画面上に表示されませんでした。 何度か試してみたのですが、コードの間違いなどが分からなかったためご質問させていただいた次第です・・・。
yambejp

2021/02/03 02:50

書き換えたいのか、データは隠しておいて表示を変えたいのかによります
int32_t

2021/02/03 02:50

問題は見当たりません。質問文に書かれている現状のHTMLとJavaScriptをつなげて、ブラウザでロードしてみると期待どおり動きませんか?
H-A-C

2021/02/03 02:54

ご確認ありがとうございます。早速試してみます。
guest

回答3

0

自己解決

先ほどご指摘通り確認いたしましたところ、ご相談いたしましたコードのままで動作いたしました。
昨日まで動いていなかったのですが、何か記述を間違っていたのかもしれません・・・。
int32_t様、yambejp様、eneko0513様ならびにご確認いただきました皆様、誠にありがとうございました。

投稿2021/02/03 03:07

編集2021/02/03 03:12
H-A-C

総合スコア0

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

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

0

HTML側のliタグが不整合を起こしているのが原因な気がします。

liタグ閉じてないですよね。

html

1<form name="cf7" class="wpcf7-form init"> 2***色々処理*** 3<ul> 4<li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢1" checked="checked" /><span>選択肢1</span></label></li> 5 <li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢2" /><span>選択肢2</span></label></li> 6 <li><label><input onclick="myCheck();" type="radio" name="aaaa" value="選択肢3" /><span>選択肢3</span></label></li> 7</ul> 8<div id="output"></div> 9***色々処理*** 10</form>

これで試してみてください。

追記:
liは閉じなくても問題無いタグでしたすみません。
こちらで試した感じだと表示したい箇所という文字列は出てきているのと
スクリプトは動いていそうだったので、その周りでなにか原因がないか確認してみてください。

投稿2021/02/03 02:57

編集2021/02/03 03:00
eneko0513

総合スコア349

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

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

0

ちょっと書き方のふるさが気になりますが

onclick="myCheck(this.value);"

という指定にして

javascript

1function myCheck(v) { 2 var id = document.getElementById("output"); 3 var txt=""; 4 if(v == "選択肢1") txt= '表示したい箇所1'; 5 if(v == "選択肢2") txt= '表示したい箇所2'; 6 if(v == "選択肢3") txt= '表示したい箇所3'; 7 id.innerHTML=txt; 8}

投稿2021/02/03 02:55

編集2021/02/03 02:57
yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問