20

Currently i have this code

setTimeout(function() { $('#hideMsg').fadeOut('fast'); }, 2000);

is it possible for me to put countdown timer for 2 seconds?

Like

<div id="hideMsg">
The entry you posted not valid.
This Box will Close In 2 Seconds
</div>

"This Box will Close In 2 Seconds" will automatically change to 2sec 1sec

Reigel Gallarde
  • 64,198
  • 21
  • 121
  • 139
cicakman
  • 1,970
  • 4
  • 22
  • 33

3 Answers3

53

use setInterval instead of setTimeout, then with the combination of clearInterval

var sec = 2
var timer = setInterval(function() { 
   $('#hideMsg span').text(sec--);
   if (sec == -1) {
      $('#hideMsg').fadeOut('fast');
      clearInterval(timer);
   } 
}, 1000);

html

<div id="hideMsg">
The entry you posted not valid.
This Box will Close In <span>2</span> Seconds
</div>

crazy demo


Making it better.

var sec = $('#hideMsg span').text() || 0;
var timer = setInterval(function() { 
   $('#hideMsg span').text(--sec);
   if (sec == 0) {
      $('#hideMsg').fadeOut('fast');
      clearInterval(timer);
   } 
}, 1000);​

so that the time will depends on what is inside the <span>. For example, <span>2</span> is 2 seconds, <span>5</span> is 5 seconds, and <span>60</span> is 1 minute.

another crazy demo

Reigel Gallarde
  • 64,198
  • 21
  • 121
  • 139
1

Note:

I didn't realize how similar this was to Reigel's answer until I read his answer. Basically, the only difference is that I use .delay() to hide the div instead of the interval. Different options...


If you put the initial number in a <span> this will count down to zero from whatever that number is:

$(function() {

               // Number of seconds counter starts at is what's in the span
    var timer, counter = $("#hideMsg span").text();

      // Delay the fadeout counter seconds
    $('#hideMsg').delay(counter * 1000).fadeOut('fast');

      // Update countdown number every second... and count down
    timer = setInterval(function() {

        $("#hideMsg span").html(--counter);
        if (counter == 0) { clearInterval(timer)};

    }, 1000);

});​

jsFiddle example


This makes use of jQuery's native .delay(), and it uses a setInterval() that stops when it gets to zero.

Peter Ajtai
  • 56,972
  • 13
  • 121
  • 140
0

Do another set timeout after a second and set the .html() of the div like this:

setTimeout(function() { $('#hideMsg').html('The entry you posted not valid. <br /> This Box will Close In 1 Second'); }, 1000);

Put them in a function and run the function onload like this:

<body onload="function_name()">

hope this helps.

Tomas Aschan
  • 58,548
  • 56
  • 243
  • 402
jodm
  • 2,607
  • 3
  • 25
  • 40
  • this will not hide it. will it? – Reigel Gallarde Sep 24 '10 at 08:02
  • You will need to use both timeout's the one above will change the text and the original one will fade it out after 2 seconds? There is also ".hide()" in jquery if you wish to hide it without fading or ".toggle()" which will show and hide depending on the current state. – jodm Sep 24 '10 at 08:09