setInterval works only the first time

Posted by Neil on Stack Overflow See other posts from Stack Overflow or by Neil
Published on 2011-01-14T16:59:58Z Indexed on 2011/01/14 20:53 UTC
Read the original article Hit count: 328

Filed under:
|

Hi,

I am trying to use setTimer to animate a slide show using straightforward jQuery. I provide the user with a button (in the form of a "DIV" with a button background image) that he clicks to start the show and which then turns into a pause button. The slides are supposed to change every 3 seconds. Here is the relevant code:

    playLink  = $('<div id="lbPlayLink"  />').click(function(){
            $(playLink).hide();
            $(pauseLink).show();
            slideInterval = setInterval(function(){next()}, 3000)
    })[0];
    pauseLink = $('<div id="lbPauseLink" />').click(function(){
            $(playLink).show();
            $(pauseLink).hide();
            clearInterval(slideInterval);
    }).hide()[0];

The next() function call does the work of replacing the slide with the next one. I have checked out this function and it works perfectly if I call it directly (synchronously), however, when it gets called asonchronously by the "setInterval", it works fine the first time (3 seconds after I click on the button), but is never called again, even though it should be called 3 seconds later. I know it's never called as I put an "alert" call at the beginning and end of the function.

If I replace the "next()" call in the "setInterval" by "alert('test')" then I can see the setInterval is doing what it is supposed to. I can't for the life of me see why "alert()" is OK but "next()" isn't, unless it has something to do with "scope" of functions, but in that case why does it work the first time?

I've tried debugging the code with firebug, but it can't really help with timeout functions like this. Neither Firefox nor IE8 show any error messages.

I've looked through the various posts here and elsewhere on setInterval, but can't see anything relevant that I haven't tried already. I've been experimenting now for about 3 hours and it's doing my head in. Can anyone suggest what I can try next?

Thanks in advance Neil

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about jQuery