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

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

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

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

jQuery

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

Q&A

解決済

3回答

936閲覧

選択肢を何度も選び直せるアンケート(jQuery、javascript)

mikuriya1123

総合スコア1

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2023/01/26 11:09

編集2023/01/26 11:36

前提

jQueryで選択肢を選ぶと答えが変わるアンケートを作りたい。
アンケート自体は作れたのですが、
選択肢を選び直した時に思うように表示が切り替わりません。

実現したいこと

Q1に対してAとBの選択肢
Aを押すと回答1が表示される
Bを押すと回答2が表示される

Aを選んだ状態でBを押す→回答1は非表示にして回答2を表示する
Bを選んだ状態でAを押す→回答2は非表示にして回答1を表示する

以下ループ

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

Aを押してある状態でBを押すとどちらも表示されなくなってしまう
(diplay:noneのままになる)

該当のソースコード

html

1 2<div class="Balloon_wrap" id="sec01"> 3 4 <dl class="Balloon reverse is-fadein"> 5 <dt></dt> 6 <dd class="que"> 7 <label><input type="radio" name="q1" id="a"><span class="enq_btn">A</span></span></label> 8 <label><input type="radio" name="q1" id="b"><span class="enq_btn">B</span></span></label> 9 </dd> 10</dl> 11 12</div> 13 14<!-- sec02 --> 15<div class="Balloon_wrap" id="sec02"> 16 17<dl class="Balloon"> 18 <dt><img src="#" alt=""></dt> 19 <dd style="width: 40%;height: 50px;"> 20 <span class="loader"></span> 21 </dd> 22</dl> 23 24<dl class="Balloon ans01"> 25<dt><img src="#" alt=""></dt> 26<dd>回答1</dd> 27</dl> 28 29<dl class="Balloon ans02"> 30<dt><img src="#" alt=""></dt> 31<dd>回答2</dd> 32</dl> 33 34<dl class="Balloon"> 35<dt><img src="#" alt=""></dt> 36<dd>・・・</dd> 37</dl> 38<dl class="Balloon"> 39<dt><img src="#" alt=""></dt> 40<dd>・・・</dd> 41</dl> 42 43</div> 44 45

jQuery

1 2$('#sec01 .que input').on('click',function(){ 3 $('#sec02').show(); 4 var loading = $('#sec02 .Balloon:nth-child(1)'); 5 $(loading).addClass('is-fadein'); 6 7 var ans = $(this).attr('id'); 8 if (ans == 'a'){ 9 var balloon = $('#sec02 .Balloon.ans01'); 10 $('#sec02 .Balloon.ans02').remove(); 11 }else{ 12 balloon = $('#sec02 .Balloon.ans02'); 13 $('#sec02 .Balloon.ans01').remove(); 14 } 15 16 var position = $('#sec02').offset().top; 17 $('body,html').animate({scrollTop:position}, 500, 'swing'); 18 19 setTimeout(function(){ 20 $(loading).hide(); 21 $(balloon).addClass('is-fadein'); 22 23 var sec = $('#sec02 .Balloon'); 24 $(sec).each(function (i) { 25 var delay = 500; 26 $(this).delay(i * delay).queue(function(next){ 27 $(this).addClass("is-fadein"); 28 next(); 29 }); 30 }); 31 },1200); 32 }); 33

###やってみたこと
・10、13行目のremove→toggle
・removeの戻り値を使ったif文の追加

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

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

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

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

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

guest

回答3

0

fontawesomeでニセラジオボタンをつくってcssだけでやる

CSS

1<style> 2.q, 3#a1a:checked ~ * [for=a1a] .far.fa-circle, 4#a1b:checked ~ * [for=a1b] .far.fa-circle, 5#a2a:checked ~ * [for=a2a] .far.fa-circle, 6#a2b:checked ~ * [for=a2b] .far.fa-circle, 7#a2c:checked ~ * [for=a2c] .far.fa-circle, 8#a1a:not(:checked) ~ * [for=a1a] .fas.fa-check-circle, 9#a1b:not(:checked) ~ * [for=a1b] .fas.fa-check-circle, 10#a2a:not(:checked) ~ * [for=a2a] .fas.fa-check-circle, 11#a2b:not(:checked) ~ * [for=a2b] .fas.fa-check-circle, 12#a2c:not(:checked) ~ * [for=a2c] .fas.fa-check-circle, 13#a1a:not(:checked) ~ * .a1a, 14#a1b:not(:checked) ~ * .a1b, 15#a2a:not(:checked) ~ * .a2a, 16#a2b:not(:checked) ~ * .a2b, 17#a2c:not(:checked) ~ * .a2c{ 18display:none; 19} 20</style> 21<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css" /> 22<form> 23<input type="radio" name="q1" id="a1a" value="a" class="q"> 24<input type="radio" name="q1" id="a1b" value="b" class="q"> 25<input type="radio" name="q2" id="a2a" value="a" class="q"> 26<input type="radio" name="q2" id="a2b" value="b" class="q"> 27<input type="radio" name="q2" id="a2c" value="c" class="q"> 28<div class="Balloon_wrap"> 29<dl class="Balloon reverse is-fadein"> 30 <dt></dt> 31 <dd class="que"> 32 <label for="a1a"><i class="far fa-circle"></i><i class="fas fa-check-circle"></i><span class="enq_btn">A</span></span></label> 33 <label for="a1b"><i class="far fa-circle"></i><i class="fas fa-check-circle"></i><span class="enq_btn">B</span></span></label> 34 </dd> 35</dl> 36</div> 37<!-- sec02 --> 38<div class="Balloon_wrap"> 39<dl class="Balloon a1a"> 40<dt><img src="#" alt=""></dt> 41<dd>質問1 回答A</dd> 42</dl> 43<dl class="Balloon a1b"> 44<dt><img src="#" alt=""></dt> 45<dd>質問1 回答B</dd> 46</dl> 47</div> 48<div class="Balloon_wrap"> 49<dl class="Balloon reverse is-fadein"> 50 <dt></dt> 51 <dd class="que"> 52 <label for="a2a"><i class="far fa-circle"></i><i class="fas fa-check-circle"></i><span class="enq_btn">A</span></span></label> 53 <label for="a2b"><i class="far fa-circle"></i><i class="fas fa-check-circle"></i><span class="enq_btn">B</span></span></label> 54 <label for="a2c"><i class="far fa-circle"></i><i class="fas fa-check-circle"></i><span class="enq_btn">C</span></span></label> 55 </dd> 56</dl> 57</div> 58<!-- sec02 --> 59<div class="Balloon_wrap"> 60<dl class="Balloon a2a"> 61<dt><img src="#" alt=""></dt> 62<dd>質問2 回答A</dd> 63</dl> 64<dl class="Balloon a2b"> 65<dt><img src="#" alt=""></dt> 66<dd>質問2 回答B</dd> 67</dl> 68<dl class="Balloon a2c"> 69<dt><img src="#" alt=""></dt> 70<dd>質問2 回答C</dd> 71</dl> 72</div>

投稿2023/01/27 00:44

yambejp

総合スコア114769

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

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

0

先を越されてしまいましたが、
もとのHTMLを書き換えずにとりあえず動かす方法として書き残しておきます。
本格的に作っていくならCocodeさんのコードのほうが無駄がなく、見やすくて良いと思います。

質問だとA、B2つの答えだけとのことですが、
コードからは3つ以上の答えも想定しているようでしたので、
.Ballonをすべて非表示にする→指定の答えだけ表示するで書き直しています。

jQuery

1//オリジナル 2if (ans == 'a'){ 3 var balloon = $('#sec02 .Balloon.ans01'); 4 $('#sec02 .Balloon.ans02').remove(); 5}else{ 6 balloon = $('#sec02 .Balloon.ans02'); 7 $('#sec02 .Balloon.ans01').remove(); 8}

jQuery

1//変更後 2if (ans == 'a'){ 3 var balloon = $('#sec02 .Balloon.ans01'); 4 $('#sec02 .Balloon').hide(); 5 $(balloon).show(); 6}else{ 7 balloon = $('#sec02 .Balloon.ans02'); 8 $('#sec02 .Balloon').hide(); 9 $(balloon).show(); 10}

投稿2023/01/26 17:49

2ckD

総合スコア305

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

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

0

ベストアンサー

ご質問と関係のないコードが書かれていて見えにくかったので、関係のない部分を省いて回答させていただきます。

変更点

  • HTMLについて
    • ラジオボタンにvalue属性をつけました。
    • 回答のdl要素に、共通のclass.answerをつけました。
    • 回答のdl要素に、カスタムデータ属性data-valueをつけました。
    • 回答のdl要素に、display:noneをつけ、最初は全部非表示にしました。
  • JavaScriptについて
    • clickイベントではなく、changeイベントにしました(clickでも構いませんが)。
    • 選択されたラジオボタンのvalueと同じ値のdata-valueをもつ要素を表示、違うものを非表示にするようにしました。

コード例

html

1<label><input type="radio" name="q1" value="A">A</label> <!-- valueをかく --> 2<label><input type="radio" name="q1" value="B">B</label> <!-- valueをかく --> 3 4<!-- ラジオボタンのvalueと同じカスタムデータ属性をつける --> 5<!-- display:noneで最初は非表示にしておく --> 6<dl class="answer" data-value="A" style="display: none"> 7 <dt><img src="https://placehold.jp/3d4070/ffffff/150x150.png?text=1%20(A)"></dt> 8 <dd>回答1(A)</dd> 9</dl> 10 11<!-- ラジオボタンのvalueと同じカスタムデータ属性をつける --> 12<!-- display:noneで最初は非表示にしておく --> 13<dl class="answer" data-value="B" style="display: none"> 14 <dt><img src="https://placehold.jp/3e704d/ffffff/150x150.png?text=2%20(B)"></dt> 15 <dd>回答2(B)</dd> 16</dl>

javascript

1// 例えばラジオボタンで「A」を選択した場合、、、 2$(function() { 3 $('[name=q1]').on('change', function() { // ラジオボタンセットの値が変更されたら実行 4 const radioValue = $(this).val(); // 選択されているラジオボタンの値(value)を取得(例:A) 5 $(`.answer:not([data-value=${radioValue}])`).hide(); // data-value="A"ではない、.answer要素を非表示 6 $(`.answer[data-value=${radioValue}]`).show(); // data-value="A"の、.answer要素を表示 7 }); 8});

投稿2023/01/26 17:25

Cocode

総合スコア2314

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

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

mikuriya1123

2023/01/27 09:39

皆様ご回答ありがとうございます。 こんなにもシンプルに書けるものなのですね…大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問