我對這裏發生的事情感到困惑。測驗第一次正常。然而,在第一場比賽之後,我遇到了各種各樣的問題。我想單擊相同的按鈕「#start2」,開始並重新啓動測驗,即清除計時器,將所有變量恢復爲0等,並顯示第一個問題。就好像頁面已被刷新一般。多次使用setInterval和clearInterval的問題
相反,我越來越快滴答作響,計時器正在增加正確的猜測等等。可怕。
我用modulo來衡量「#start2」div被點擊的次數。在第一次點擊時,啓動計時器。第二次點擊 - 我想重置計時器。第三次點擊 - 啓動計時器,等等。
任何幫助是大規模讚賞。
var n = 0;
var x = 0;
var p = 0;
var incTime;
function a(n) {
var x,y,z;
x = Math.floor((Math.random() * 3))
if(x == 0){y = 1; z = 2}else if(x == 1){y = 0; z = 2}else{y = 0; z = 1}
$("#question_holder2").text(questions[n].q);
$(".answer_holder2").eq(x).text(questions[n].a).data('answer', 'a');
$(".answer_holder2").eq(y).text(questions[n].b).data('answer', 'b');
$(".answer_holder2").eq(z).text(questions[n].c).data('answer', 'c');
}
$(document).ready(function() {
//timing element
function startTimer(x){
$("#start2").text(x);
}
$("#start2").click(function(){
var setTimer;
p++;
//if it's been clicked before
if(p%2 === 0){
clearInterval(setTimer);
$("#start2").text("Start");
n = 0;
x = 0;
a(n);
alert("okay");
}else if(p%2 !== 0){
//never been clicked before
a(n);
setTimer = setInterval(function(){startTimer(x=x+1)}, 1000);
$('.answer_holder2').click(function() {
//correct answer given
if ($(this).data('answer') === 'a') {
n++;
if (n < questions.length) {
a(n);
} else {
alert("End of quiz!");
clearInterval(setTimer);
$("#start2").text("You took " + x + " seconds, you answered " + n + " questions correctly, with - incorrect answers given.");
x = 0;
n = 0;
a(n);
}
}else{
//incorrect answer given
$(this).fadeTo(1000,0.4);
var timeString = $("#start2").text();
var incTime = (timeString * 1) + 5;
$("#start2").text(incTime);
startTimer(incTime);
x = incTime;
};
});
};
});
});
您應該在腳本頂部的變量中定義'setTimer'在全局範圍內。 – 2013-02-08 14:39:33
@SeainMalkin其實你不應該在全局範圍內定義**任何**。 – freakish 2013-02-08 14:48:26
@freakish這是真的,但由於他已經定義了一堆全局變量,缺乏對範圍的一些理解,我決定保持簡單。 – 2013-02-08 14:52:20