【问题标题】:Grading a test - Loop checking radio input values (JS)为测试评分 - 循环检查无线电输入值 (JS)
【发布时间】:2017-02-07 15:06:10
【问题描述】:

我正在做一个在线测试,你可以直接得到你的输出。我一直在用循环检查无线电输入的值。为什么给checkFields函数输出undefined?

Javascript 代码:

    <script type="text/javascript">
        $(document).ready(function(){

//click button
$("#submitTest").click(function(){

//check if all answers are given
for (i = 1; i <= 10; i++) {
    if (checkFields([i].toString())) {

//calculate total score
    if ($("input[name=[i]]").val() == aq[i]) {score = score + 1};
}

        else{alert("Please answer all questions");
        break}};

console.log(score);

//return level of English

}
)
//setFunction
function checkFields(Q){
    console.log(
    $("[name='[Q]']:checked").val())
}
//Set score 0
var score = 0;
//Answers
var aq1 = "a1";
var aq2 = "a1";
var aq3 = "a3";
var aq4 = "a2";
var aq5 = "a1";
var aq6 = "a2";
var aq7 = "a3";
var aq8 = "a3";
var aq9 = "a1";
var aq10 = "a1";
}
)
</script> 

HTML 代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <!-- liberaries -->
    <script src="jquery-3.1.1.js"></script>
</head>
<body>
    <!-- Form -->
    <form id="testEnglish">
        <!-- Q1 -->
        <p class="question">1. Can I park here?</p>
        <input type="radio" id="1" name="1" value="a1">a1<br>
        <input type="radio" id="1" name="1" value="a2">a2<br>   
        <input type="radio" id="1" name="1" value="a3">a3
        <!-- Q2 -->
        <p class="question">2. Can I park here?</p>
        <input type="radio" name="2" value="a1">a1<br>
        <input type="radio" name="2" value="a2">a2<br>
        <input type="radio" name="2" value="a3">a3
        <!-- Q3 -->
        <p class="question">3. Can I park here?</p>
        <input type="radio" name="3" value="a1">a1<br>
        <input type="radio" name="3" value="a2">a2<br>
        <input type="radio" name="3" value="a3">a3
        <!-- Q4 -->
        <p class="question">4. Can I park here?</p>
        <input type="radio" name="4" value="a1">a1<br>
        <input type="radio" name="4" value="a2">a2<br>
        <input type="radio" name="4" value="a3">a3
        <!-- Q5 -->
        <p class="question">5. Can I park here?</p>
        <input type="radio" name="5" value="a1">a1<br>
        <input type="radio" name="5" value="a2">a2<br>
        <input type="radio" name="5" value="a3">a3
        <!-- Q6 -->
        <p class="question">6. Can I park here?</p>
        <input type="radio" name="6" value="a1">a1<br>
        <input type="radio" name="6" value="a2">a2<br>
        <input type="radio" name="6" value="a3">a3
        <!-- Q7 -->
        <p class="question">7. Can I park here?</p>
        <input type="radio" name="7" value="a1">a1<br>
        <input type="radio" name="7" value="a2">a2<br>
        <input type="radio" name="7" value="a3">a3
        <!-- Q8 -->
        <p class="question">8. Can I park here?</p>
        <input type="radio" name="8" value="a1">a1<br>
        <input type="radio" name="8" value="a2">a2<br>
        <input type="radio" name="8" value="a3">a3
        <!-- Q9 -->
        <p class="question">9. Can I park here?</p>
        <input type="radio" name="9" value="a1">a1<br>
        <input type="radio" name="9" value="a2">a2<br>
        <input type="radio" name="9" value="a3">a3
        <!-- Q10 -->
        <p class="question">10. Can I park here?</p>
        <input type="radio" name="10" value="a1">a1<br>
        <input type="radio" name="10" value="a2">a2<br>
        <input type="radio" name="10" value="a3">a3

    </form>
    <!-- Submit -->
    <button id="submitTest">Submit Test!</button>
</body>
</html>

此代码可能不是执行此操作的方法。我尝试了各种方法,但没有成功。


在下面编辑

新代码

https://jsfiddle.net/5fnugrts/#&togetherjs=AOK0k8r4i2

HTML 代码

<!doctype html>
          <html lang="en">
          <head>
          <meta charset="utf-8">
          <!-- Libaries -->
          <script src="jquery-3.1.1.js"></script>
          </head>
          <body>
          <!-- Form -->
          <form id="testEnglish">
            <div id="myForm"></div>
          </form>
          <!-- Submit button -->
          <button id="submitTest">Submit Test!</button>

Javascript 代码

<!-- JS -->
<script type="text/javascript">
  $(document).ready(function() {
    //Answers and Questions constructor ("question","answer1","answer2","answer3","a"+number of correct answer)
    function Question(question, answer1, answer2, answer3, correctAnswer) {
      this.q = question;
      this.a1 = answer1;
      this.a2 = answer2;
      this.a3 = answer3;
      this.ca = correctAnswer;
    };
    //Answers and Questions ("question","answer1","answer2","answer3","a"+number of correct answer)
    var aQ = {
      Q1: new Question("What is the correct answer 1?", "Cheese", "Ham", "Turkey", "a1"),
      Q2: new Question("What is the correct answer 2?", "Cheese", "Ham", "Turkey", "a1"),
      Q3: new Question("What is the correct answer 3?", "Cheese", "Ham", "Turkey", "a2"),
      Q4: new Question("What is the correct answer 4?", "Cheese", "Ham", "Turkey", "a2"),
      Q5: new Question("What is the correct answer 5?", "Cheese", "Ham", "Turkey", "a3"),
    };
    //Set Setinhtml function ("name of radio group" "question","answer1","answer2","answer3","a"+number of correct answer)
    function appendQuestion(groupName, question, answer1, answer2, answer3) {
      $("div#myForm").append("<p class=\"question\">" + question + "</p>")
      $("div#myForm").append("<input type=\"radio\" name=\"" + groupName + "\" value=\"a1\">" + answer1 + "<br>")
      $("div#myForm").append("<input type=\"radio\" name=\"" + groupName + "\" value=\"a2\">" + answer2 + "<br>")
      $("div#myForm").append("<input type=\"radio\" name=\"" + groupName + "\" value=\"a3\">" + answer3 + "<br>")
    };
    //Set in HTML loop
    for (i = 1; i <= Object.keys(aQ).length; i++) {
      appendQuestion([i],
        eval("aQ.Q" + [i] + ".q"),
        eval("aQ.Q" + [i] + ".a1"),
        eval("aQ.Q" + [i] + ".a2"),
        eval("aQ.Q" + [i] + ".a3"),
        eval("aQ.Q" + [i] + ".ca"))
    };
    //Sumbit answers
    $("#submitTest").click(function() {
      score = 0
        //Loop and give values
      for (i = 1; i <= Object.keys(aQ).length; i++) {
        tAnswer = $("input:radio[name ='" + i + "']:checked").val()
        cAnswer = eval("aQ.Q" + i + ".ca")
          //Check if answers are filled in
        if (!tAnswer) {
          alert("Please answer all questions");
          return;
        }
        //Check correct answers
        else if (tAnswer == cAnswer) {
          score++
        }
      }
      //Report score
      alert("Your score is " + score + "/" + Object.keys(aQ).length);
    });
  });

</script>

【问题讨论】:

  • 它正在寻找一个名为 Q 的复选框。您需要构建字符串 "[name='" + Q + "']:checked"
  • 太棒了。干杯! :)

标签: javascript jquery input radio-group


【解决方案1】:

我对您的代码进行了调整,使其更加紧凑和高效

这是codepen

 $(document).ready(function() {
   //Set score 0
   var score = 0;
   //Answers
   aq1 = "a1";
   aq2 = "a1";
   aq3 = "a3";
   aq4 = "a2";
   aq5 = "a1";
   aq6 = "a2";
   aq7 = "a3";
   aq8 = "a3";
   aq9 = "a1";
   aq10 = "a1";

   $("#submitTest").click(function() {
     score = 0
     for (i = 1; i <= 10; i++) {
       tAnswer = $("input:radio[name ='" + i + "']:checked").val()
       cAnswer = window["aq"+i]
       if (!tAnswer) {
         alert("Please answer all questions");
         return;
       } else if (tAnswer == cAnswer) {
         console.log("#"+i+": correct")
         score++
       } else if (tAnswer != cAnswer) {
         console.log("#"+i+" incorrect")
       }
     }
    alert("Your score is "+ score +"/10");
   });
 });

tAnswer是答案,cAnswer是正确答案,你也可以检查if(!cAnswer)那你没有定义正确答案。

【讨论】:

  • 我刚刚注意到我在没有回答所有问题时使用了break。这是一个错误,因为它会中断循环,但仍会继续执行其余的函数。请改用return。我编辑了答案。
  • 干杯。你能解释一下区别吗? window["aq"+i] 是做什么的?我替换了它 - 并编辑了代码,以便 HTML 由 JS 生成。见上文。
  • 如果 i = 1 window["aq"+i] 指代名为 aq1 的变量,这是必需的,因为如果我们使用 aq+i,代码将尝试查找名为 aq 的变量并添加值i 给它。至于你的问题的其余部分,我没有对上面的代码进行任何更改
猜你喜欢
  • 1970-01-01
  • 2021-09-23
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多