2013-05-06 40 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