前提・実現したいこと
ドットインストールのjavascriptを参考に三択問題を作成しています。
問題をといた後に正解数を表示したいのですが、表示されません。
どのように改善したら表示されるようになるでしょうか?
発生している問題・エラーメッセージ
該当のソースコード
html
1<div class="q-answer-content"> 2<section class="container-main"> 3 <title class="cate-h1 mb-4">Answer</title> 4 <div class="row"> 5 6 <p id="question"></p> 7 <ul id="choices"> 8 </ul> 9 <div id="btn" class="disabled">Next</div> 10 </div> 11 12 <section id="result" class="hidden"> 13 <p></p> 14 <a href="">Replay?</a> 15 </section> 16</section> 17 18<%= javascript_pack_tag 'posts/answer.js' %> 19</section> 20 </div> 21
css
1.q-answer-content { 2 width: 400px; 3 margin: 140px auto; 4 border-radius: 4px; 5 padding: 16px; 6 position: relative; 7 color: white; 8 background-color: rgba(80,80,80,0.5); 9 border: 1px solid white; 10} 11 12 13#question { 14 margin-bottom: 16px; 15 font-weight: bold; 16} 17 18#choices { 19 list-style: none; 20 padding: 0; 21 margin-bottom: 16px; 22} 23 24#choices>li { 25 border: 1px solid #ccc; 26 border-radius: 4px; 27 padding: 10px; 28 margin-bottom: 10px; 29 cursor: pointer; 30} 31 32#choices>li:hover { 33 background: #b5a1a1; 34} 35 36#choices>li.correct { 37 background: #d4edda; 38 border-color: #c3e6cb; 39 color: #155724; 40 font-weight: bold; 41} 42 43#choices > li.correct::after { 44 content: ' ... correct!'; 45} 46 47#choices>li.wrong { 48 background: #f8d8da; 49 border-color: #f5c6cb; 50 color: #721c24; 51 font-weight: bold; 52} 53 54#choices>li.wrong::after { 55 content: ' ... wrong!'; 56} 57 58#btn, #result > a { 59 background: #3498db; //回答選択後のNextの色 60 padding: 8px; 61 border-radius: 4px; 62 cursor: pointer; 63 text-align: center; 64 color: #fff; 65 box-shadow: 0 4px 0 #2880b9; 66} 67 68#btn.disabled { 69 background: #ccc;//回答する前のNextの色 70 box-shadow: 0 4px 0 #bbb; 71 opacity: 0.7; 72} 73 74#result { 75 position: absolute; 76 width: 300px; 77 background: white; 78 padding: 30px; 79 box-shadow: 0 4px 8px rgba(0,0,0,0.2); 80 top: 50px; 81 left: 0; 82 right: 0; 83 margin: auto; 84 border-radius: 4px; 85 text-align: center; 86 transition: 0.4s; 87} 88 89#result.hidden { 90 transform: translateY(-500px); 91} 92 93#result > p { 94 font-size: 24px; 95} 96 97#result > a { 98 display: block; 99 text-decoration: none; 100} 101
javascript
1'use strict'; 2 3{ 4 const question = document.getElementById('question'); 5 const choices = document.getElementById('choices'); 6 const btn = document.getElementById('btn'); 7 const result = document.getElementById('result'); 8 const scoreLabel = document.querySelector('#result > p'); 9 10 const quizSet = shuffle([{ 11 q: '世界で一番大きな湖は?', 12 c: ['カスピ海', 'カリブ海', '琵琶湖'] 13 }, 14 { 15 q: '2の8乗は?', 16 c: ['256', '64', '1024'] 17 }, 18 { 19 q: '次のうち、最初にリリースされた言語は?', 20 c: ['Python', 'JavaScript', 'HTML'] 21 }, 22 ]); 23 let currentNum = 0; 24 let isAnswered; 25 let score = 0; 26 27 function shuffle(arr) { 28 for (let i = arr.length - 1; i > 0; i--) { 29 const j = Math.floor(Math.random() * (i + 1)); 30 [arr[j], arr[i]] = [arr[i], arr[j]]; 31 } 32 return arr; 33 } 34 35 function checkAnswer(li) { 36 if (isAnswered) { 37 return; 38 } 39 isAnswered = true; 40 41 if (li.textContent === quizSet[currentNum].c[0]) { 42 li.classList.add('correct'); 43 score++; 44 } else { 45 li.classList.add('wrong'); 46 } 47 48 btn.classList.remove('disabled'); 49 } 50 51 function setQuiz() { 52 isAnswered = false; 53 54 question.textContent = quizSet[currentNum].q; 55 56 while (choices.firstChild) { 57 choices.removeChild(choices.firstChild); 58 } 59 60 const shuffledChoices = shuffle([...quizSet[currentNum].c]); 61 shuffledChoices.forEach(choice => { 62 const li = document.createElement('li'); 63 li.textContent = choice; 64 li.addEventListener('click', () => { 65 checkAnswer(li); 66 }); 67 choices.appendChild(li); 68 }); 69 70 if (currentNum === quizSet.length - 1) { 71 btn.textContent = 'Show Score'; 72 } 73 } 74 75 setQuiz(); 76 77 btn.addEventListener('click', () => { 78 if (btn.classList.contains('disabled')) { 79 return; 80 } 81 btn.classList.add('disabled'); 82 83 if (currentNum === quizSet.length - 1) { 84 scoreLabel.textContent = `Score: ${score} / ${quizSet.length}`; 85 result.classList.remove('hidden'); 86 } else { 87 currentNum++; 88 setQuiz(); 89 } 90 }); 91} 92
補足情報(FW/ツールのバージョンなど)
javascriptに関してはドットインストールと同じコードを記入しています。(background-colorだけ変えてます)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/25 09:45