Javascript正确的答案计数不起作用

时间:2013-05-06 15:59:01

标签: javascript jquery html

请原谅非常业余的代码,因为我最近才开始做HTML / 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>

1 个答案:

答案 0 :(得分:1)

在修复了一些代码之后,我意识到了你的问题:你正在为每个新问题定义keydown事件的 new 事件处理程序,从不删除旧的事件处理程序。

您应该使用off()删除现有的处理程序,并使用on()来设置新的处理程序,因此总是只有一个:

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

但是你真的需要为每个新问题重新定义事件处理程序吗?唯一正在改变的是要与之比较的correctAnswer值。您应该真正定义一次处理程序,并让它动态确定correctAnswer值。