2013-10-07 34 views
1

我期望下面的代码运行如下: 1)遍历for循环直到完成。 2)执行回调函数jQuery中的意外回调行为

而是在每次迭代后执行回调函数。这是范围问题吗?我误解了回调的控制流程吗?

function flipPages(direction,n,duration,callback){ 
    for(i=0;i<n;i++){ 
     setTimeout(function() { $('#flipbook').turn(direction);}, ((i+1) * duration)); 
    } 
    callback; 
} 

flipPages("next",4,1000,flipPages("previous",4,2000)); 
+3

在将参数作为回调传递之前,您无法将参数传递给回调。你正在做的是立即执行“上一步”,然后执行“下一步”。此外,你从来没有执行'回调',你缺少'()' –

+2

你误解了setTimeout我认为...流程可能如下:1)循环遍历,启动超时2)启动回调3)启动所有的方法调用现在超时结束 –

+0

你应该尝试这一点,正如@KevinB flipPages(“next”,4,1000,function(){flipPages(“previous”,4,2000)})指出的那样。 –

回答

1

除了所有这些相关意见,我想你想要做这样的事情:

function flipPages(direction, n, duration){ 
    for(var i = 0, l = n; i < n; i++){ 
     setTimeout(function() { 
      $('#flipbook').turn(direction); 
      if (!(--n)) { 
       flipPages({ 
        // direction switch 
        next: "previous", 
        previous: "next" 
       }[direction], n, duration); 
      } 
     }, ((i + 1) * duration)); 
    } 
} 

flipPages("next", 4, 1000); 

更新时间:无需使用回调,直接使用flipPages