2013-05-06 37 views
-1

請原諒非常業餘的代碼,我只是最近纔開始做HTML/JavaScript等的Javascript正確答案計數不工作

我正在這裏空中交通管制一個競猜型應用。他們在文本輸入框中鍵入正確的答案,並且數據塊更改以反映新的高度。當我嘗試它時,它的效果非常好。但是,當我開始嘗試使用計數器來追蹤正確和不正確的響應時,在第一個答案後,計數器將始終首先記錄不正確的響應,然後立即記錄正確的響應。因此,如果他們正確回答了2個問題,退出按鈕將顯示他們有2個問題是正確的,1個問題是錯誤的。

這裏是我的代碼:

<script> 
var correctAns = 0; 
var incorrectAns = 0; 


var newProblem = function() { 
var AircraftData = new Aircraft(); 
$("#altitudeLine").focus(); 
$("#problem").html(AircraftData.newAlt); 
$("#callsign").html(AircraftData.callsign); 
$("#altitudeLine").html(AircraftData.initAltitude + "C"); 
$("#aid").html(AircraftData.aid); 
$("#speed").html(AircraftData.speed); 
$("#altInput").focus(); 

$(document).keydown(function(e) { 
    var correctAnswer = "QQ" + " " + AircraftData.newAlt + " " + AircraftData.aid; 
    var userAnswer = $("#altInput").val().toUpperCase(); 
    if (e.which == 13) { 
     if (correctAnswer == userAnswer) { 
      $("#feedback").html("Correct!"); 
      $("#altitudeLine").html(AircraftData.newAlt + "T" + AircraftData.initAltitude); 
      correctAns++; 
      return; 
     } 
     else { 
      $("#feedback").html("Incorrect!"); 
      incorrectAns++; 
      return; 
     } 
    }  
}); 
} 


function clearProblem() { 
$("#feedback").html(""); 
$("#altInput").val(""); 
$("#altInput").focus(); 
setTimeout(newProblem(), 2000); 
} 

function results() { 
alert("Correct: " + correctAns + " | Incorrect " + incorrectAns); 
} 
</script> 
</head> 

// stripped out a lot of code not relevant 

<button onClick="newProblem()">Start</button> 
    <button id="next" onClick="clearProblem()">Next</button> 
    <span id="problem"></span> 
    <input type="text" id="altInput"> 
    <span id="feedback"></span> 
    <br /> 
    <button id="quitButton" onClick="results()">Quit</button> 
</div> 
+2

嘗試調出代碼中您認爲問題出在的位置,而不是要求完整的審閱。 – 2013-05-06 16:01:40

+0

也許你也可以發佈'newProblem()'的源代碼?可以幫助一個_little_。 – Pietu1998 2013-05-06 16:03:34

+1

可能更適合[codereview.stackexchange.com](http://codereview.stackexchange.com/)... – War10ck 2013-05-06 16:04:14

回答

1

固定的一些代碼後,我意識到自己的問題:你要定義一個事件處理keydown事件,每一個新的問題,而不會刪除舊的事件處理程序。

您應該使用關閉()刪除現有的處理程序,並在()設置新的所以有永遠只有一個:

$(document).off('keydown'); 
$(document).on('keydown', function() { ... }); 

但是你真的需要每一個新的重新定義事件處理程序問題?唯一改變的是與之比較的correctAnswer值。您應該真的定義一次處理程序,並讓它動態地確定correctAnswer值。

+0

布賴恩,完美的工作!非常感謝,我甚至不知道想到這一點。你說得對,我真的應該只有一個事件處理程序。我打算玩這個代碼,並嘗試按照你的建議得到它。 – 2013-05-06 17:04:27