プログラミング言語(JavaScript)を勉強し始めて数週間のひよっこです・・・皆様のお力をお借りしたいので、よろしくお願いいたします!
所用で、質問に回答していくと、答えが絞り込まれる設計の**「アキネーター」**のようなプログラムを、作成したくなりました・・・!
例として、実現したいことは以下のようなイメージです!
【実現したいこと】
【Yes/No質問(ラジオボタン)】
Q1.動物ですか?
Q2.首が長いですか?
Q3.植物ですか?
Q4.トゲがありますか?
Q5.人間ですか?
Q6.ミュージシャンですか?
【答えの可能性リスト(一覧で全て表示した状態で、「不正解」になったものからテキストを赤色に変化させたいです)】
・キャベツ
・サボテン
・象
・キリン
・マイケルジャクソン
・織田信長
そこで、初心者ながらに力技で次のようなコードを作ってみました。
※かなり非効率で長ったらしいコードだと思いますが、お許しください・・・
【html】
<h1>質問</h1> <div id="Questions"> <div> <p>Q. 動物ですか?</p> <label><input type="radio" name="RadGrpA1" id="A1Yes">YES</label> <label><input type="radio" name="RadGrpA1" id="A1No">No</label> </div> <div> <p>Q. 首が長いですか?</p> <label><input type="radio" name="RadGrpA2" id="A2Yes">YES</label> <label><input type="radio" name="RadGrpA2" id="A2No">No</label> </div> <div> <p>Q. 植物ですか?</p> <label><input type="radio" name="RadGrpA3" id="A3Yes">YES</label> <label><input type="radio" name="RadGrpA3" id="A3No">No</label> </div> <div> <p>Q. トゲがありますか?</p> <label><input type="radio" name="RadGrpA4" id="A4Yes">YES</label> <label><input type="radio" name="RadGrpA4" id="A4No">No</label> </div> <div> <p>Q. 人間ですか?</p> <label><input type="radio" name="RadGrpA5" id="A5Yes">YES</label> <label><input type="radio" name="RadGrpA5" id="A5No">No</label> </div> <div> <p>Q. ミュージシャンですか?</p> <label><input type="radio" name="RadGrpA6" id="A6Yes">YES</label> <label><input type="radio" name="RadGrpA6" id="A6No">No</label> </div> <h1>可能性</h1> <p id="Cabbage">キャベツ</p> <p id="Cactus">サボテン</p> <p id="Elephant">象</p> <p id="Giraffe">キリン</p> <p id="MichaelJackson">マイケルジャクソン</p> <p id="NobunagaOda">織田信長</p> </div>
【JavaScript】
document.getElementById("Questions").addEventListener("change", () => { let JudgeCabbage = ""; let JudgeCactus = ""; let JudgeElephant = ""; let JudgeGiraffe = ""; let JudgeMichaelJackson = ""; let JudgeNobunagaOda = ""; //Q1に対する回答 if (document.getElementById("A1Yes").checked) { if (JudgeCabbage == "") { JudgeCabbage = "不正解"; } if (JudgeCactus == "") { JudgeCactus = "不正解"; } if (JudgeElephant == "") { JudgeElephant = ""; } if (JudgeGiraffe == "") { JudgeGiraffe = ""; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = ""; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = ""; } }; if (document.getElementById("A1No").checked) { if (JudgeCabbage == "") { JudgeCabbage = ""; } if (JudgeCactus == "") { JudgeCactus = ""; } if (JudgeElephant == "") { JudgeElephant = "不正解"; } if (JudgeGiraffe == "") { JudgeGiraffe = "不正解"; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = "不正解"; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = "不正解"; } }; //Q2に対する回答 if (document.getElementById("A2Yes").checked) { if (JudgeCabbage == "") { JudgeCabbage = "不正解"; } if (JudgeCactus == "") { JudgeCactus = "不正解"; } if (JudgeElephant == "") { JudgeElephant = "不正解"; } if (JudgeGiraffe == "") { JudgeGiraffe = ""; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = "不正解"; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = "不正解"; } }; if (document.getElementById("A2No").checked) { if (JudgeCabbage == "") { JudgeCabbage = ""; } if (JudgeCactus == "") { JudgeCactus = ""; } if (JudgeElephant == "") { JudgeElephant = ""; } if (JudgeGiraffe == "") { JudgeGiraffe = "不正解"; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = ""; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = ""; } }; //Q3に対する回答 if (document.getElementById("A3Yes").checked) { if (JudgeCabbage == "") { JudgeCabbage = ""; } if (JudgeCactus == "") { JudgeCactus = ""; } if (JudgeElephant == "") { JudgeElephant = "不正解"; } if (JudgeGiraffe == "") { JudgeGiraffe = "不正解"; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = "不正解"; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = "不正解"; } }; if (document.getElementById("A3No").checked) { if (JudgeCabbage == "") { JudgeCabbage = "不正解"; } if (JudgeCactus == "") { JudgeCactus = "不正解"; } if (JudgeElephant == "") { JudgeElephant = ""; } if (JudgeGiraffe == "") { JudgeGiraffe = ""; } if (JudgeMichaelJackson == "") { JudgeMichaelJackson = ""; } if (JudgeNobunagaOda == "") { JudgeNobunagaOda = ""; } }; (//Q6に対する回答まで中略) if (JudgeCabbage == "不正解") { document.getElementById("Cabbage").style.color = "red"; } else { document.getElementById("Cabbage").style.color = "black"; } if (JudgeCactus == "不正解") { document.getElementById("Cactus").style.color = "red"; } else { document.getElementById("Cactus").style.color = "black"; } if (JudgeElephant == "不正解") { document.getElementById("Elephant").style.color = "red"; } else { document.getElementById("Elephant").style.color = "black"; } if (JudgeGiraffe == "不正解") { document.getElementById("Giraffe").style.color = "red"; } else { document.getElementById("Giraffe").style.color = "black"; } if (JudgeMichaelJackson == "不正解") { document.getElementById("MichaelJackson").style.color = "red"; } else { document.getElementById("MichaelJackson").style.color = "black"; } if (JudgeNobunagaOda == "不正解") { document.getElementById("NobunagaOda").style.color = "red"; } else { document.getElementById("NobunagaOda").style.color = "black"; } });
・・・ここまで読んでくださり、ありがとうございます。。。
知識が乏しく、イメージ通りの動きを実現することで精一杯で、短くコーディングするアイデアが浮かびません。
この状態だと、問題や正解の選択肢が増えるとかなりの労力がかかってしまいます。
同じことを何度も記述しているので、少しでも短く記述する方法があれば、ぜひ教えていただきたいです。
また、実際には「不正解」の選択肢を赤色に変えるだけではなく、グレーアウトさせたり、視覚的な効果も加えたいです。その場合は、JavaScript側から該当(不正解)項目に「class属性」を付与して、それをCSSで脚色する、というイメージで当たっていますでしょうか?
どんな些細なアドバイスでも非常に助けになりますので、ぜひご回答いただけると嬉しいです!どうかよろしくお願いいたしますm(_ _)m
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/28 13:21