Echo
Echo

Reputation: 3029

setTimeout functionality is not working

I am trying to use the jQuery setTimeout in order to call a method each x time interval:

 $('.text').blur(function () {
     doSmth();
 });

 $('.text').bind("paste", function (e) {
     setTimeout(function () {
         doSmth();
     }, 5);
 });

The timeout is not working , please advice !

Upvotes: 2

Views: 221

Answers (4)

Echo
Echo

Reputation: 3029

According to your feedback,here is the solution:

   var interval =  setInterval(doSmth, 5000);


    $('.text').blur(function() {
        doSmth();
    });

    $('.text').bind("paste", function(e) {
        setTimeout(function() {
            doSmth();
        }, 0);
    });

Thanks for you amazing support.

Upvotes: 0

Christofer Eliasson
Christofer Eliasson

Reputation: 33865

I see that the other answers user setInterval, but from what I've read, you should avoid using setInterval, since you can end up with a stack of not-yet-executed function calls etc.

So what you could do instead is something like this:

var myTimeout;  
$('.text').bind("paste", function (e) {
     function loopFunction () {
        doSmth();
        myTimeout = setTimeout(loopFunction, 5000);
     } 
     myTimeout = setTimeout(loopFunction, 5000);
});

Now you have a function that calls itself every five seconds.

Upvotes: 0

Nicola Peluchetti
Nicola Peluchetti

Reputation: 76870

What do you mean with "it's not working"?Anyway setTimeout() is a Javascript function that triggers only once after the specified interval.

If you wan't to trigger something every five second you should do:

var interval =  setInterval(doSmth, 5000);

Where doSmth is a function defined elsewhere and 5000 is the number of millisecond of the interval. If yo want to stop the execution just do:

clearInterval(interval);

Upvotes: 2

RightSaidFred
RightSaidFred

Reputation: 11327

First, it isn't a "jQuery setTimeout". setTimeout is part of the native API, not jQuery's API.

Second, I assume you want 5 seconds. Currently you're doing 5 milliseconds.

$('.text').bind("paste", function(e) {
    setTimeout(function() {
        doSmth();
    }, 5000);
});

The duration of 5 in your code is far too short to be perceptible.

Upvotes: 1

Related Questions