2011-09-06 23 views
0
var i = -1; 
$('.rightBtn a').click(function(){ 

     --i; // this part works.. 

     if(i == -z){ 
      $(".homeSlider").css("margin-left", 0); 
      $('.homeSlider').animate({ 
       marginLeft: '-='+$(window).width() 
      }, function(){ 
       var i = -1; // this is where its not working  
       alert(i); // alerts it correct at -1 
       return i; // this doesn't return it? 

      }); 
      return i; 
     } else { 
      $('.homeSlider').animate({ 
       marginLeft: '-='+$(window).width() 
      }); 
     return i; 
     } 
     return i; 
    //} 
}); 

我只是忘记了什么?另外,为了论证var z = 5无法设置当我返回链

+0

这段奇怪的代码会更容易阅读,如果它是正确的格式'-.-' –

+0

这是一个JavaScript块..出于某种原因,我认为行i = -1;是非法的。 – Xeo

回答

3

如果没有任何东西可以接收,你将返回i。设置值,不要返回它。

基本上你会通过i回到HTML。 HTML是愚蠢的。它不知道该如何处理它。

+0

但是,当我删除返回并且它达到z值时,我将它设置为-1,但是当我观察萤火虫中的表达式时,它只会持续到-5 -6 -7 – Xeo

3
  var i = -1; // this is where its not working 

这是因为你正在创建一个新的变量,你失去了原来的范围。试试这个:

  i = -1; 
+0

@Diodeus哈哈感谢那。 :P不知道我是如何错过的。 –

1

总之,有很多事情错在这里:

  1. .animate()功能是异步的,因此在返回之前完成函数运行,因此完成功能对无影响从您的点击功能返回值。
  2. click函数的返回值用于决定点击传播是否应该继续,它应该是布尔值。
  3. 完成函数中的局部变量覆盖对全局的访问。通常,你不需要一个具有相同名字的本地和全局变量。
  4. 来自完成函数的返回值不用于任何事情,因此返回i的本地副本没有任何操作。

我不认为你了解异步函数是如何工作的。当您调用动画时,它会启动动画并立即返回。我的价值不会因完成回调而改变。因此,当它返回时,它将返回全局值i

稍后,动画的完成功能将被调用。在这个函数中,你声明了一个名为i的新局部变量,它的值是设置并返回它。但是完成函数的返回值没有任何反应,所以什么都不做。所以,动画完成功能对全局变量i的值没有影响。

然后,从点击函数返回i可能没有做你想做的事情。点击函数的返回值应该是一个布尔值,它的值决定了点击传播是否继续。您返回(false)停止点击传播。所以从click函数返回i的值也对全局变量没有影响。

最后,全局变量和局部变量具有相同的名称通常是不可取的做法。很容易混淆两者,而没有意识到哪些代码受到任何代码的影响。局部变量取代所以当你用var i;声明一个局部变量,然后用i = -1;赋值给它时,你只分配给局部变量而不影响全局变量。

1

您在回电时在本地重新定义我。 将其更改为:

function(){     
    i = -1; 
    alert(i); // alerts it correct at -1     
    return i; // this doesn't return it?    
}); 
1

你初始化VAR我在同一范围内的两倍。另外,你回来了我,没有任何接受它。