具有相同名称的单选按钮的在线测验

3

我正在使用JS制作一个简单的测验,问题在于我的内部循环(即 i )没有按照预期工作。

我有3个问题,每个问题都有3个单选按钮选项,每个问题的选项具有相同的名称。第一个问题的所有选项都有 name='cap',第二个问题的选项是 name='an',第三个问题是 name='lang'

我的js函数如下:

function my(){
  var count=0; 
  var totalQuestions = 3;
  var correctAnswers = 0;
  var alertText;
  var n=["cap","an","lang"];
  var j,i;
  for(j=0; j<n.length; ++j){
    var x = document.getElementsByName('n[j]');
    for(i = 0; i < x.length; ++i){
      if (x[i].checked){
        if (x[i].value == 'true'){
          count=count+10;
          correctAnswers++;
          break;
        }
      }
    }
  }
  if(correctAnswers == totalQuestions){
    alertText = "Congratulations! You got all the questions right!";
  }
  else {
    alertText = "You got " + correctAnswers + " correct answers and score is " + count;
  }
  alert(alertText);
}
3个回答

4

替换行

var x = document.getElementsByName('n[j]');

为了

var x = document.getElementsByName(n[j]);

这是一个问题,因为对于js来说getElementsByName('n [y]')的意思是“获取名称为n [y]”的元素,而不是列表项n中包含你需要选择的元素的名称。

祝好运!


谢谢。请问这行代码是否正确:for(i = 0; i < x.length; ++i)?x.length会给出选项的数量吗? - Shivi12
@Shivi12 是的,它应该给你很多选项的数量。 - Andriy Ivaneyko

2

var x = document.getElementsByName('n[j]');

应该改为

var x = document.getElementsByName(n[j])

getElementsByName根据文档返回所有与名称匹配的元素。

问题在于您硬编码了字符串'n[j]',因此它正在查找所有名称为'n[j]'的元素。

实际上,您想要在索引j处从数组n中查找名称。因此,删除引号将实际评估表达式n[j]


1

将您的代码从以下内容更改:

var x = document.getElementsByName('n[j]');

To

var x = document.getElementsByName(n[j]);

您现有的代码试图查找一个具有name='n[j]'即字符串的元素。但是您想要评估表达式获取名称等于评估值的元素

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接