Javascript 测验显示错误分数

Javascript 测验显示错误分数,javascript,html,Javascript,Html,我正在尝试仅使用javascipt构建测验应用程序,但它给了我错误的分数。我首先用0初始化了correct变量,然后每次选择正确答案时,我都想用1增加correct变量,但它显示了错误的分数。我真的很努力地想找到任何错误,但是找不到。请有人帮助我修复此代码,如果有人能指定它显示错误分数的原因,我也将不胜感激 var问题,问题,pos=0, ch1,ch2,ch3,cho,storeval,正确=0; 问题=[ [“什么是10+4”、“12”、“14”、“16”、“B”], [“什么是7 x 3

我正在尝试仅使用javascipt构建测验应用程序,但它给了我错误的分数。我首先用0初始化了correct变量,然后每次选择正确答案时,我都想用1增加correct变量,但它显示了错误的分数。我真的很努力地想找到任何错误,但是找不到。请有人帮助我修复此代码,如果有人能指定它显示错误分数的原因,我也将不胜感激

var问题,问题,pos=0,
ch1,ch2,ch3,cho,storeval,正确=0;
问题=[
[“什么是10+4”、“12”、“14”、“16”、“B”],
[“什么是7 x 3”、“21”、“22”、“23”、“A”],
[“什么是20-9”、“15”、“13”、“11”、“C”],
[“什么是8/2”、“5”、“4”、“2”、“B”]
];
question=document.getElementById('question');
函数loadQ(){
ch1=问题[pos][1];
ch2=问题[pos][2];
ch3=问题[pos][3];
question.innerHTML=问题[pos][0]+“
”; question.innerHTML+=“+ch1+”
”; question.innerHTML+=“+ch2+”
”; question.innerHTML+=“+ch3+”
”; } 函数submitAnswer(){ cho=document.getElementsByName('choices'); 对于(变量i=0;i

测验

您在
提交者中有两个独立的
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 + ".");
  }
}

实例 您可以通过如下方式修改循环代码来创建实时示例:

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 + ".");
  }
}
console.log(“即将进入循环,storeval为“+storeval+”);
对于(变量i=0;i
以“X已选中!”开头的消息表示输入了第一条
if
语句。以“
storeval
匹配预期问题X!”开头的消息表示输入了第二条
if
语句

如果您在第一个问题上选择了正确答案,您将得到:

循环即将进入<代码>存储值
未定义。
正在为答案A运行循环。
i
为0。
正在为答案B运行循环。
i
为1。
B被检查了!将
storeval
设置为B.
storeval
与预期的问题B匹配!将
更正为1。
正在为答案C运行循环。
i
为2。
storeval
与预期的问题B匹配!更新
更正为2

如果您在第二个问题上选择正确答案,您将得到:

循环即将进入<代码>存储值
为B.
正在为答案A运行循环。
i
为0。
A被检查了!将
storeval
设置为A.
storeval
与预期的问题A匹配!将
更正为3。
正在为答案B运行循环。
i
为1。
storeval
与预期的问题A匹配!将
更正为4。
正在为答案C运行循环。
i
为2。
storeval
与预期的问题A匹配!更新
更正为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 ;
            }
    }
函数submitAnswer(){
storeval=$('input[name=choices]:checked').val();
if(storeval==问题[pos][4]){
正确的++;
}
pos++;
如果(位置<问题长度){
loadQ();
}否则{
question.innerHTML=“您的分数”+正确;
}
}

您说您“非常努力地寻找错误”,但看起来您没有使用(点击
F12
)并使用
控制台.log
调试器对其进行调试。这就是你发现这些错误的方式。OP没有使用jQuery。谢谢!写现在我在我的初始阶段开始与javascript,我知道浏览器控制台,但无法解决问题,从那里,这就是为什么我来到这里。但我部分理解了这段代码为什么应该这样嵌套,如果可能的话,你能用一个例子解释一下吗?再次感谢你抽出时间。我知道密码了。如果有像你这样的人,Stackoverflow将永远是很棒的。将在不久的将来与您进行互动,了解更多信息。再次感谢。保重,巴德