Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环函数(Javascript回调帮助)_Javascript_Jquery_Function_Callback - Fatal编程技术网

循环函数(Javascript回调帮助)

循环函数(Javascript回调帮助),javascript,jquery,function,callback,Javascript,Jquery,Function,Callback,我没有对Javascript函数做太多的工作,我正在尝试让一个函数在短时间延迟后自行循环。我似乎有一些使用setTimeout()的代码,但我似乎不知道如何让它在我的实例中工作,以下是我的代码: var number = 8; var iter = 1; function slide_function(iter, amount, callback){ if(iter<amount){ console.log('test'); $('#ta

我没有对Javascript函数做太多的工作,我正在尝试让一个函数在短时间延迟后自行循环。我似乎有一些使用setTimeout()的代码,但我似乎不知道如何让它在我的实例中工作,以下是我的代码:

var number = 8;
var iter = 1;

function slide_function(iter, amount, callback){    
    if(iter<amount){
        console.log('test');

        $('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){         
            $(this).next('span').fadeIn();      
        });

        var iter = iter + 1;
    }
    else if(iter==amount){
        console.log('test2');

        var iter = 1;

        $('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){         
            $(this).next('span').fadeIn();      
        });

        var iter = iter + 1;
    }
}

slide_function(iter, number, setTimeout(slide_function(iter, number),5000));
var数=8;
var-iter=1;
函数slide_函数(iter,amount,callback){

如果(iter这可能对您有效,请在末尾添加此项,替换最后一行:

setInterval(function(){
  slide_function(iter,number)
},5000);
并删除slide_函数中的回调参数


编辑:查看下面John T的评论

Sirikon的答案有效,另一种方法是从
幻灯片功能
中链接调用,此外,此代码避免全局调用。未经测试,因此可能存在一些错误

function slideShow(iter, amout) {
  function slide_function(){
      // Using mod operations is the common way to handle looping around the end
      iter = iter % amount;
      $('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){         
          $(this).next('span').fadeIn();      
      });
      // You were using var, so you were creating a new variable instead 
      // of modifying the shared variable
      iter++;
  }

  setTimeout(slideShow, 5000);
}
slideShow(0,8);

我建议您在fadeIn完成后设置Timeout。否则,如果您的延迟比fadeIn短,您将遇到同时尝试fadeIn和fadeout的问题

尝试重新排列代码,使其如下所示:

// starts at 1, ends at 8
slide_function(1, 8);

function slide_function(iter, amount) {

    // defines a function called runAgain inside slide_function()
    var runAgain = function() {
        // setTimeout takes in a function as the first parameter and delay as the second one
        setTimeout(function() {
            // inside the function, run slide function with an incremented iter
            slide_function(iter+1, amount);
        }, 5000);
    }

    if(iter<amount){
        console.log('test');
        $('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){         
            $(this).next('span').fadeIn(runAgain);      
        });

    }
    else if(iter==amount){
        console.log('reached the limit, resetting iter to 1');
        iter = 1;
        $('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){         
            $(this).next('span').fadeIn(runAgain);      
        });

    }
}
//从1开始,到8结束
滑动_功能(1,8);
功能幻灯片功能(iter,金额){
//在slide_function()中定义一个名为runreach的函数
var runreach=function(){
//setTimeout将函数作为第一个参数,将延迟作为第二个参数
setTimeout(函数(){
//在函数内部,使用递增的iter运行slide函数
幻灯片功能(iter+1,数量);
}, 5000);
}

如果(iter
slide\u function
从未调用callback?同时,您将超时id传递给
slide\u function
,而不是一个函数,也就是说,
setTimeout
不返回函数。如果他采用这种方法,他还需要去掉slide\u function()中的“var iter”。否则,setInterval范围内的iter将始终为1