2014-10-01 80 views
1

为什么在选择不正确的无线电选项时,if语句中的其他仍然出现? 其他部分应该只发生在没有选择单选按钮时。真正的结果是出现下一个问题和可能的答案。这里有jsfiddle。我究竟做错了什么?测验 - 如果陈述

function checkAnswer(){ 
submit.onclick = function(){ 
var radios = document.getElementsByName('choices'); 
var i = 0; 
var len = radios.length; 

    while(i<len){ 
     if(radios[i].checked){ 
      if(radios[i].id == allQuestions[0].correctAnswer){ 
       userScore++; 
       alert("curent score:" + userScore); 
       break; 
      } 
     }else{ 
      alert("Please selected an option"); 
      break; 
     } 
     i++ 
    } 
    } 
} 

回答

3

您正在循环所有单选按钮。如果超过1个,那么至少保证其中一个未被选中,所以你将进入else。试试这个:

function checkAnswer(){ 
    submit.onclick = function(){ 
     var radios = document.getElementsByName('choices'); 
     var i = 0; 
     var len = radios.length; 
     var foundSelected = false; 
     while(i<len){ 
      if(radios[i].checked){ 
       foundSelected = true; 
       if(radios[i].id == allQuestions[0].correctAnswer){ 
        userScore++; 
        alert("curent score:" + userScore); 
        break; 
       } 
      } 
      i++ 
     } 
     if (!foundSelected) 
      alert("Please selected an option"); 
    } 
} 
+0

非常感谢! – samsos 2014-10-01 16:24:13

2

else

if(radios[i].checked){ 

,并触发每当有没有选中一个单选按钮。这在逻辑上不同于没有选中的单选按钮。

0

假设没有选择第一个单选按钮。然后,在while循环的第一次迭代中,radios[i].checked将是错误的,并且循环中断。

要检查是否选择任何按钮,你应该做的,而不是像这样:如果任何按钮被选中

function checkIfSelected() { 
    var i = 0; 
    while (i < len) { 
     if (radios[i].checked) { 
      return true; 
     } 
    } 
    return false; 
} 

该函数返回。在继续之前调用它。