簡體   English   中英

測驗顯示錯誤分數

[英]Quiz displays wrong score

我正在嘗試僅使用javascipt構建測驗應用程序,但它給了我錯誤的分數。 我首先用0初始化正確的變量,然后每次選擇正確的答案后都想將正確的變量增加1,但這會顯示錯誤的分數。 我非常努力地尋找任何錯誤,但是找不到錯誤。 請有人幫助我修復此代碼,如果可以指定原因顯示錯誤的分數,我也將感激

 var questions, question, pos = 0, ch1, ch2, ch3, cho, storeval, correct = 0; questions = [ ["What is 10 + 4", "12", "14", "16", "B"], ["What is 7 x 3", "21", "22", "23", "A"], ["What is 20 - 9", "15", "13", "11", "C"], ["What is 8/2", "5", "4", "2", "B"] ]; question = document.getElementById('question'); function loadQ() { ch1 = questions[pos][1]; ch2 = questions[pos][2]; ch3 = questions[pos][3]; question.innerHTML = questions[pos][0] + "<br>"; question.innerHTML += "<input type='radio' name='choices' value='A'>" + ch1 + "<br>"; question.innerHTML += "<input type='radio' name='choices' value='B'>" + ch2 + "<br>"; question.innerHTML += "<input type='radio' name='choices' value='C'>" + ch3 + "<br>"; } function submitAnswer() { cho = document.getElementsByName('choices'); for (var i = 0; i < cho.length; i++) { if (cho[i].checked) { storeval = cho[i].value; } if (storeval == questions[pos][4]) { correct++; } } pos++; if (pos < questions.length) { loadQ(); } else { question.innerHTML = "Your Score is " + correct; } } 
 <!DOCTYPE html> <html> <head> <title>Quiz</title> </head> <body onload="loadQ()"> <div id="customize"> <div id="question"></div> <input type="button" onclick="submitAnswer()" value="Submit"> </div> </body> </html> 

您在submitAnswer有兩個獨立的if語句。 第二個檢查是否storeval == questions[pos][4] ,但這可能是storeval的舊值,因為它不依賴於第一個if語句來更改當前問題的值。 另外,它會為具有潛在錯誤值的每個輸入運行。 它們應該像這樣嵌套:

if (cho[i].checked) {
  storeval = cho[i].value;
  if (storeval == questions[pos][4]) {
    correct++;
  }
}

您實際上可以通過修改循環代碼來創建實時示例,如下所示:

console.log("The loop is about to be entered. storeval is " + storeval + ".");
for (var i = 0; i < cho.length; i++) {
  console.log("The loop is running for answer " + cho[i].value + ". i is " + i + ".");
  if (cho[i].checked) {
    storeval = cho[i].value;
    console.log(cho[i].value + " is checked! Set storeval to " + storeval + ".");
  }
  if (storeval == questions[pos][4]) {
    correct++;
    console.log("storeval matches the expected question " + storeval + "! Update correct to " + correct + ".");
  }
}

以“ X被檢查!”開頭的消息表示輸入了第一個if語句。 以“ storeval匹配預期的問題X !”開頭的消息表示輸入了第二個if語句。

如果您在第一個問題上選擇正確的答案,您將獲得:

即將進入循環。 storeval未定義。
循環運行的答案A. i是0。
循環運行的答案B. i是1。
B被檢查! storeval設置為B。
storeval符合預期的問題B! correct更新為1。
循環運行的答案C. i是2。
storeval符合預期的問題B! correct更新為2。

如果您隨后在第二個問題上選擇正確的答案,您將獲得:

即將進入循環。 storeval是B。
循環運行的答案A. i是0。
A已檢查! storeval設置為A。
storeval符合預期的問題A! correct更新為3。
循環運行的答案B. i是1。
storeval符合預期的問題A! correct更新為4。
循環運行的答案C. i是2。
storeval符合預期的問題A! correct更新為5。

代替for循環來獲取已選中的單選。 將JQuery添加到您的項目更加容易。

function submitAnswer(){

        storeval = $('input[name=choices]:checked').val();

            if(storeval==questions[pos][4]) {
                correct++;
            }

            pos++;

            if (pos < questions.length){
            loadQ();
            } else  {
                question.innerHTML = "Your Score is " + correct ;
            }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM