やりたいこと
- 3択のラジオボタンを作成し、判定ボタンで集計を出す
- 集計の結果に応じて、if文でコメントを出す
- 未選択のラジオボタンがある場合はエラーを出す
- IEでも動作する
「JavaScript+診断テスト」で検索すれば 似たようなプログラムはいくつもヒットしますが、この4つを満たすものがなかなか無かったため自分で作成しました。
コピペで使えます。
DEMO
ここに結果が出るよ!
コメントの条件分岐
Aが多い場合は「卵好きだね!」
Bが多い場合は「乳製品好きだね!」
Cが多い場合は「もしかして豆好き?」
ABCが1個ずつ選択された場合は「バランスの良いチョイスだね!」と出るはずです。
ソースコード
HTMLコード
<form id="shitsumon" name="shitsumon" onsubmit="check(); return false;"> <ul> <li> <p>朝食に絶対欠かせないものは?</p> <label><input name="q0" type="radio" value="A" required="" />A.卵料理</label><br /> <label><input name="q0" type="radio" value="B" />B.ヨーグルト</label><br /> <label><input name="q0" type="radio" value="C" />C.納豆</label></li> <li> <p>ランチ何食べる?</p> <label><input name="q1" type="radio" value="A" required="" />A.オムライス</label><br /> <label><input name="q1" type="radio" value="B" />B.グラタン</label><br /> <label><input name="q1" type="radio" value="C" />C.麻婆豆腐</label></li> <li> <p>3時のおやつといえば?</p> <label><input name="q2" type="radio" value="A" required="" />A.プリン</label><br /> <label><input name="q2" type="radio" value="B" />B.レアチーズケーキ</label><br /> <label><input name="q2" type="radio" value="C" />C.大福</label></li> </ul> <input type="submit" value="判定!" class="hantei" /></form> <div id="kekka">ここに結果が出るよ!</div>
JavaScriptコード
function check() { let str = []; //ラジオボタンの中身を取得 const q = [document.shitsumon.q0, document.shitsumon.q1, document.shitsumon.q2]; //A・B・Cそれぞれの合計点数を入れるための変数 var aaa = 0; var bbb = 0; var ccc = 0; //どのラジオボタンが選択されたか判定し、点数を加算 for (let n = 0; n < q.length; n++) { for (let i = 0; i < q[n].length; i++) { if (q[n][i].checked) { str[n] = q[n][i].value; if (str[n] == "A") { aaa++; } else if (str[n] == "B") { bbb++; } else if (str[n] == "C") { ccc++; } break; } } } //コメントの条件分岐 var message = ""; if (aaa > bbb && aaa > ccc) { message = "卵好きだね!"; } else if (bbb > aaa && bbb > ccc) { message = "乳製品好きだね!"; } else if (ccc > aaa && ccc > bbb) { message = "もしかして豆好き?"; } else { message = "バランスの良いチョイスだね!"; } //HTMLへ出力 var html = '<div>'; html += 'A=' + aaa + '個<br>'; html += 'B=' + bbb + '個<br>'; html += 'C=' + ccc + '個<br><br>'; html += '' + message + ''; html += '</div>'; document.getElementById("kekka").innerHTML = html; }
CSSコード
見栄えの部分。無くてもOK。
/*質問部分を太字に&空白調整*/ #shitsumon p { margin: 10px 0 5px 0; font-weight: bold; } #shitsumon li:not(:last-child) { margin-bottom: 20px; } /*ラジオボタンとテキストの間に余白を入れる*/ #shitsumon input[type="radio"] { margin-right: 5px; } /*判定ボタンのデザイン*/ .hantei { background: #cc0000; color: #fffec5; font-weight: bold; border: none; } /*結果部分の空白調整*/ #kekka { margin: 20px 0; } /*結果部分のデザイン*/ #kekka div { background: rgba(0, 0, 0, 0.1); display: inline-block; padding: 10px; border-radius: 20px 10px 80px 30px/40px 70px 30px 40px; }