开发者

How to stop the timer once you end an exam?

I want to stop this timer when I end the exam, but before it reaches zero. Kindly help me out on scripts please. Thanks.

JavaScript code:

var cnt = 165*60; // 165 minutes (2 hours & 45 minutes) convert to seconds

function countdown() {
    if (cnt < 0) {
        document.f.c.value = "- : - - : - -" ;
    }
    else {
        hour = Math.floor(cnt / 3600);
        totalmin = Math.floor(cnt / 60);
        min = totalmin - (hour * 60);
        sec = cnt - (totalmin * 60);
        if (sec < 10) { sec = "0" + sec;}
        if (min < 10) {min = "0" + min;}
        if (hour < 10) {hour 开发者_JAVA百科= "0" + hour;}
        document.f.c.value = hour + ":" + min + ":" + sec;
        cnt--;
        _timer = setTimeout("countdown()", 1000);
    }
}

var _timer = setTimeout("countdown()", 1000); // tick


I assume you meant that you want to end the timer before the countdown reaches 0.

First of all, you should use setInterval instead. It should work in all major browsers (including IE). It is just a slightly nicer way to express "I want this to happen every so often." According to the MDN, it:

Calls a function repeatedly, with a fixed time delay between each call to that function.

Here's how you would use it:

var cnt = 165*60; // 165 minutes (2 hours & 45 minutes) convert to seconds
function countdown() {
  if (cnt < 0) {
   document.f.c.value = "- : - - : - -" ;
  }
  else {
   hour = Math.floor(cnt / 3600);
   totalmin = Math.floor(cnt / 60);
   min = totalmin - (hour * 60);
   sec = cnt - (totalmin * 60);
   if (sec < 10) {sec = "0" + sec;}
   if (min < 10) {min = "0" + min;}
   if (hour < 10) {hour = "0" + hour;}
   document.f.c.value = hour + ":" + min + ":" + sec;
   cnt--;

   if(cnt <= 0) { # Stops the timer when it reaches 0.
       clearInterval(_interval);
   }
  }
}
var _interval = setInterval(countdown, 1000);

And somewhere in your page have a button that will stop the timer.

<input type="button" value="Done" onclick="clearInterval(_interval)">

Although to be honest, having a countdown timer freaks me out. I'd rather have a count-up timer. :-)


In your else part check

if(current_time < total_time)
{
   //Set TimeOut
}


I think your best bet here is to use setInterval rather than setTimeout.

setInterval returns a handle to the interval. clearInterval(handle) will cancel that interval. Here's some pseudo to get you started:

var global_timer;

function countdown(){
    // do some countdown stuff

    if([we're done]) {
        window.clearInterval(global_timer);
    }
}

global_timer = window.setInterval("countdown()", 1000);


In the code that you execute when user ends the exam, probably after button click, just add such line:

window.clearTimeout(_timer);

And the timer will stop ticking.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜