tags:

views:

131

answers:

3

Hello,

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

A: 

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.

jodm
this will not hide it. will it?
Reigel
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
+4  A: 

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
In the crazy demo, the start of counting down seemms a little delayed...
Tomas Lycken
@Reigel - ignore the haters - it's useful for me :) +1rep
Neurofluxation
Working great, why there is delay initially? Is it fixable? Thanks
cicakman
try playing with `var sec = 2`. try it as `var sec = 3` or `var sec = 5` and see what would happen.. ;) cheers!
Reigel
see also, **Making it better.** above.
Reigel
+1 - Remember who got you to 10k ;) - congrats!
Peter Ajtai
@Peter - haha lol.
Reigel
A: 

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