2014-04-04 36 views
2

所以我知道這段代碼很長。對不起,但我不犧牲可讀性的空間。當我測試此代碼控制檯給了我這個錯誤:爲什麼控制檯無法找到我的變量?

ReferenceError: Can't find variable: useranswer 
    doMath 
    onclick 

這是一個可以自動按我的「電子郵件測驗」按鈕,通過電子郵件發送測驗。

帶有「a **」命名法的每個變量都是無線電輸入的布爾狀態。我正在檢查每個問題的價值,以便讓用戶回答每個問題。然後,如果答案匹配,我將它與正確答案和增量分數進行比較。

我也有一些問題與電子郵件測驗功能......我不知道是什麼問題。

對這些問題有何洞見?

<!DOCTYPE HTML> 
<html> 

<!--========================================================================--> 
    <script type="text/javascript"> 

    function doMath() 
    { 
     //Score 

     var score = 0; 

     // arrays to store answers, and user submited answers. 
     var answer = new Array(); 
     var userAnswer = new Array(); 

     // Quiz answers: 

     answer[0] = "e"; 
     answer[1] = "b"; 

     var a11 = document.getElementById('answer1-1').checked; 
     var a12 = document.getElementById('answer1-2').checked; 
     var a13 = document.getElementById('answer1-3').checked; 
     var a14 = document.getElementById('answer1-4').checked; 
     var a15 = document.getElementById('answer1-5').checked; 

     var a21 = document.getElementById('answer2-1').checked; 
     var a22 = document.getElementById('answer2-2').checked; 
     var a23 = document.getElementById('answer2-3').checked; 
     var a24 = document.getElementById('answer2-4').checked; 
     var a25 = document.getElementById('answer2-5').checked; 


     // checks users answer for first question: 
     if(a11){ 
      useranswer[0] = "a"; 
     } 
     else if(a12){ 
      useranswer[0] = "b"; 
     } 
     else if(a13){ 
      useranswer[0] = "c"; 
     } 
     else if(a14){ 
      useranswer[0] = "d"; 
     } 
     else{ 
      useranswer[0] = "e"; 
     } 

     // checks users answer for second question: 
     if(a11){ 
      useranswer[1] = "a"; 
     } 
     else if(a12){ 
      useranswer[1] = "b"; 
     } 
     else if(a13){ 
      useranswer[1] = "c"; 
     } 
     else if(a14){ 
      useranswer[1] = "d"; 
     } 
     else{ 
      useranswer[1] = "e"; 
     } 

     //adds up score: 

     if(userAnswer[0] == answer[0]){ 
      score++; 
     } 

     if(userAnswer[1] == answer[1]){ 
      score++; 
     } 

     emailQuiz(score); 
     console.log("doMath is working"); 
    } 
    //////////////////////////////////////////////////////////////////////// 
    </script> 
    <script> 
    //////////////////////////////////////////////////////////////////////// 
    function emailQuiz(score) 
    { 
     var test = "\n\n You scored " + score + "/2 on the test."; 
     window.open('mailto: [email protected]' 
         + '?subject= quiz answers' 
         + '&body= Your quiz results:' + escape(test)); 

     console.log("emailQuiz is working"); 
    } 
    //////////////////////////////////////////////////////////////////////// 
    </script> 
<!--========================================================================--> 
</head> 

    <button type="button" onclick="doMath();emailQuiz();">Email Quiz</button> 

</body> 
<!--========================================================================--> 
</html> 

回答

5

JavaScript中的變量區分大小寫。

userAnswer != useranswer 

這可能不會出現明顯不過,因爲JavaScript會自動啓閉任何非var版varible向全局命名空間上它的第一項任務。

+1

我曾經認爲這是使JavaScript成爲編寫大型項目的糟糕語言的原因,但「使用strict」;'指令有助於捕獲像這樣的錯誤(通過在任何賦值之前強制var,以及其他有用的東西)。 –

相關問題