2010-12-14 27 views
0

J'ai la page ajax suivante. Le formulaire doit être soumis et le compte à rebours doit être redémarré lorsque le chronomètre expire ou que le bouton est cliqué.
Pour une raison quelconque, la minuterie n'est pas réinitialisée et devient négative. Quelqu'un peut-il me dire comment résoudre ce problème?Javascript timer aide nécessaire

(Le code est autonome, vous pouvez copier/coller ans tester, puis exécutez-le sur le serveur)

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

Ma première hypothèse est que vous devez utiliser <= 0 au lieu de ==, au cas où vous sautez d'une manière ou d'une autre 0. – Robert

+0

Si je fais cela 'sendForm();' est appelé chaque seconde – Caner

+1

Il ne compte pas négatif pour moi. En outre, le send() semble fonctionner aussi bien. – Kissaki

Répondre

0

ajouts suivants fixed it:
<input id="timeLeft" type="hidden" value="<?php echo $time; ?>" />
...

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

0

Comme je l'ai mentionné dans mon commentaire, vous devez utiliser <=0 . Comme vous avez répondu, sendForm() est alors appelé toutes les secondes. Cela n'a pas de sens, donc je pense qu'il se passe quelque chose d'autre

Ma deuxième observation est que vous ne réinitialisez jamais timeLeft. Un bon endroit pour ce serait suite à l'appel à sendForm

+0

'timeLeft' devrait provenir de la page suivante (ie après que' sendForm() 'soit appelé et que la réponse soit chargée), donc à cet instant je ne connais pas la valeur. – Caner

+0

ok, mettre une valeur codée en dur pour 'timeLeft' après' sendForm() 'travaillé. Maintenant, la question est comment puis-je obtenir cette valeur de «réponse» – Caner