2010-12-14 83 views
0

我有以下ajax頁面。當定時器到期或點擊按鈕時,表單應該被提交併且定時器應該重新開始倒計時。
由於某些原因,定時器未被重置並變爲負值。有人能告訴我如何解決這個問題嗎?Javascript計時器幫助需要

(代碼是獨立的,你可以複製/粘貼ANS測試,然後在服務器上運行它)

test.htm:


<html> 
<head> 
<script type="text/javascript" src="http://mootools.net/download/get/mootools-core-1.3-full-compat.js"></script> 
</head> 
<body> 
<div id="container"> 
<form id="form" name="form" action="test.htm" method="post"> 
Remaining time: <input type="text" name="clock" size="4">seconds 
<input type="submit" value="submit" ID="questionSubmit"> 
</form> 
<script type="text/javascript"> 
var timeLeft = 10; 
function startClock() { 
    timeLeft--; 
    document.form.clock.value = timeLeft; 
    if(timeLeft == 0) { 
     sendForm(); 
    } 
    else { 
     setTimeout("startClock()", 1000); 
    } 
} 

setTimeout("startClock()", 1000); 
</script> 

<script type="text/javascript"> 
function handleSubmit(e) { 
    e = new Event(e).stop(); 
    sendForm(); 
} 

function sendForm() { 
    $('form').set('send', {onComplete: function(response) { 
     $('container').set('html', response); 
     $('questionSubmit').addEventListener('click', handleSubmit, false); 
     setTimeout("startClock()", 1000); 
    }}); 
    //Send the form. 
    $('form').send(); 
} 

$('questionSubmit').addEventListener('click', handleSubmit, false); 
</script> 
</div> 
</body> 
</html> 
+0

我的第一個猜測是,你應該使用<= 0,而不是==,以防你以某種方式跳過0。 – Robert 2010-12-14 03:33:53

+0

如果我這樣做'sendForm();'每秒調用一次 – Caner 2010-12-14 03:36:36

+1

它對我沒有負面影響。另外,send()似乎也可以工作。 – Kissaki 2010-12-14 03:41:50

回答

0

以下補充以下固定它:
<input id="timeLeft" type="hidden" value="<?php echo $time; ?>" />
...

function sendForm() {
/.../
timeLeft = document.getElementById('timeLeft').value;
/.../
}

0

正如我在我的評論中提到,你應該使用<=0 。正如你所回答的那樣,每秒鐘都會調用sendForm()。這是沒有意義的,所以我懷疑還有別的事情

我的第二個觀察是,你永遠重置timeLeft。這方面的一個好去處將是調用sendForm

+0

'timeLeft'應該來自下一頁(即調用'sendForm()'並且加載響應之後),所以在那一刻我不知道這個值。 – Caner 2010-12-14 03:50:07

+0

好吧,在'sendForm()'工作後爲'timeLeft'設置一個硬編碼值。現在的問題是如何從'response'中獲取這個值 – Caner 2010-12-14 04:11:32