【问题标题】:Quiz - Counts Radio Button Values测验 - 计算单选按钮值
【发布时间】:2019-03-07 13:01:43
【问题描述】:

我正在尝试为西班牙语课程创建测验。我对 JavaScript 几乎没有经验,但对 html 和 CSS 相当精通。我有一个问题,然后是三个带有答案的单选按钮。有两个错误答案和一个正确答案。我总共有 45 个问题。

<form name="quiz" method="post" name="buttons" id="form" onsubmit="return totalVal()">

<li><div class="question">¿Quién detestan la nueva casa?</div></li>
<input id="answer" type="radio" name="group1" value="wrong"> Josh<br>
<input id="answer" type="radio" name="group1" value="wrong"> Amanda<br>
<input id="answer" type="radio" name="group1" value="correct"> Josh y Amanda<hr>

<li><div class="question">¿Quién es señor Dawes?</div></li>
<input id="answer" type="radio" name="group2" value="wrong">Un familia amigo<br>
<input id="answer" type="radio" name="group2" value="wrong">Un gato<br>
<input id="answer" type="radio" name="group2" value="correct">Un amable joven de la agencia de bienes raíces<hr>

<li><div class="question">¿Quién qué sus buscan?</div></li>
<input id="answer" type="radio" name="group3" value="wrong">Josh<br>
<input id="answer" type="radio" name="group3" value="wrong"> Petey<br>
<input id="answer" type="radio" name="group3" value="correct" >Josh y Petey<hr>

<button class="submit" onclick="showTotalvalue();" type="submit">Submit</button></div>

我想使用一些基本的 Javascript 来计算所有“正确”的单选按钮值并输出到用户单击提交后显示的新页面或警报框。

我在研究中发现了这一点。在我的谷歌搜索中,我无法找到计算“正确”值的代码 sn-p。上面的链接是我得到的最接近的。我附上了我根据其他帖子的建议更改的 JavaScript 以适应我的情况。

totalVal = 0;

// calculate the total number of corrects clicked

for (y = 0; y = incorrectOfQuestion; y++) {
    var questionNo = document.getElementsByName("questions" + y);
    for (i = 0; i < questionNo.length; i++) {
        if (document.myform.questions[i].checked == true) {
            totalVal = totalVal + parseInt(document.myform.questions[i].value, 45);
        }
    }
}

非常感谢任何帮助,因为我正处于时间紧迫的状态!谢谢!

【问题讨论】:

  • parseInt(..., 45) 应该做什么?您以 45 为基数进行计算,但我不明白您为什么要这样做。
  • 如果你使用 JQuery,这个任务会变得更简单,jquery.com
  • @pimvdb - 我的猜测是 OP 认为 radix 参数与问题的数量有关。
  • @pimvdb 它认为这是来自上面链接的问题总数。

标签: javascript html count radio-button


【解决方案1】:

这应该是让它与警报框一起工作所需的代码:

        function handleClick()
          {         
        var amountCorrect = 0;          
        for(var i = 1; i <= 45; i++) {
          var radios = document.getElementsByName('group'+i);
          for(var j = 0; j < radios.length; j++) {
            var radio = radios[j];
            if(radio.value == "correct" && radio.checked) {
              amountCorrect++;
            }
          }
         }                   
            alert("Correct Responses: " + amountCorrect);
          }
        <form name="quiz" method="post" name="buttons" id="quiz" onsubmit="return false">

        <li><div class="question">¿Quién detestan la nueva casa?</div></li>
        <input id="answer" type="radio" name="group1" value="wrong"> Josh<br>
        <input id="answer" type="radio" name="group1" value="wrong"> Amanda<br>
        <input id="answer" type="radio" name="group1" value="correct"> Josh y Amanda<hr>

        <li><div class="question">¿Quién es señor Dawes?</div></li>
        <input id="answer" type="radio" name="group2" value="wrong">Un familia amigo<br>
        <input id="answer" type="radio" name="group2" value="wrong">Un gato<br>
        <input id="answer" type="radio" name="group2" value="correct">Un amable joven de la agencia de bienes raíces<hr>

        <li><div class="question">¿Quién qué sus buscan?</div></li>
        <input id="answer" type="radio" name="group3" value="wrong">Josh<br>
        <input id="answer" type="radio" name="group3" value="wrong"> Petey<br>
        <input id="answer" type="radio" name="group3" value="correct" >Josh y Petey<hr>

        <button class="submit" onclick="return handleClick();" type="submit">Submit</button>
        
        </form>

@pimvdb 在检查不允许类型转换并因此失败的“正确”字符串时使用了 === 运算符。他还使用了 getElementsByClassName,但元素没有应用类,所以这是不正确的。

工作版本可以在下面的小提琴中找到。如您所见,表单的 onsubmit 已设置为“return false”以阻止表单发布。

http://jsfiddle.net/g45nG/1/

【讨论】:

  • 我不知道为什么=== 在这里不起作用。在这种情况下==做了什么类型转换?
  • 那应该回答你的问题。在上面的例子中,一个是字符串类型,另一个显然不是,所以最好使用 == 而不是 === 因为这总是会失败,除非你转换 radio.value 的值
  • .value 不是字符串吗?如果是这样,转换为字符串correct的值是什么?
  • 我认为在这种情况下,它会将其作为数组中的对象而不是字符串返回。要使您的代码正常工作,您首先必须将 .getElementsByClassName 更改为 .getElementsByName 并将 radio.value === "correct" 更改为 radio.value.toString() === "correct"。
【解决方案2】:

您可以遍历每个单选组,然后遍历每个单选按钮以检查是否选中了正确的单选按钮。

var amountCorrect = 0;
for(var i = 1; i <= 45; i++) {
  var radios = document.getElementsByName("group" + i);
  for(var j = 0; j < radios.length; j++) {
    var radio = radios[j];
    if(radio.value === "correct" && radio.checked) {
      amountCorrect++;
    }
  }
}

【讨论】:

  • 所以我只有一次这个脚本吗?然后在用户选择提交时调用它?还是我有 45 个脚本?
  • 这将处理所有单选按钮,只要您保持当前代码的约定(例如,45 个单独的单选按钮组和组中的一个单选按钮的值正确)。
  • 我为单选按钮设置了单独的组,并且所有值都已指定。选择提交按钮时如何调用脚本?我认为我的提交按钮和表单声明会双重调用脚本。我基本上想要一个单独的页面加载,用户选择的正确或弹出一个警报框?我如何就他们的答案向用户提供反馈?
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2014-03-31
  • 2020-08-15
相关资源
最近更新 更多