0

I have this code:

var playySlideNumber = "1";
var run = function playSlides (playySlideNumber){
    $(".slider.secondLayer").css("opacity", "0");
    $(".slider.secondLayer.n"+playySlideNumber).css("opacity", "1");
    if  (playySlideNumber < 5) {
        playySlideNumber = parseInt(playySlideNumber) + 1;
    } else {playySlideNumber = "1"}
    return playySlideNumber
}
setInterval(function(){run(playySlideNumber)}, 3000);

I need that function playySlides() returns playySlideNumber so that every time the setInterval runs it has the correct playySlideNumber. The problem is that playySlideNumber keeps constant = "1".

Also, would it be easier to use a setTimeout that recursively calls playySlides()?

Raymond Chen
  • 44,448
  • 11
  • 96
  • 135
Paulo Janeiro
  • 3,181
  • 4
  • 28
  • 46

2 Answers2

2

You need to remove the argument because it's overshadow the the global variable and don't need to return value from run function because it's not used anywhere:

var playySlideNumber = "1";
var run = function playSlides(){
    $(".slider.secondLayer").css("opacity", "0");
    $(".slider.secondLayer.n"+playySlideNumber).css("opacity", "1");
    if  (playySlideNumber < 5) {
        playySlideNumber = parseInt(playySlideNumber) + 1;
    } else {playySlideNumber = "1"}
}
setInterval(run, 3000);
jcubic
  • 61,973
  • 54
  • 229
  • 402
-2

The problem is that the first time this code runs, playSlideNumber is a string, then you try to evaluate if it is less than 5 but it will never be so, so it goes in the else branch which puts "1" (a string) back into your variable.