2014-10-01 81 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; 
} 

該函數返回。在繼續之前調用它。