2011-06-08 60 views
2

编辑 - 香港专业教育学院改变了我的代码:jQuery语法错误? CSS和动画的 '如果' 和 '其他' 语句

这工作得很好:

$(".image-div").click(function() { 
     if ($(this).css('z-index') == 1) 
      $(this).css('z-index','2'); 
     else 
      $(this).css('z-index','1'); 
}); 

而且这也适用:

$(".image-div").click(function() { 
     if ($(this).css('z-index') == 1) 
      $(this).animate({ 
       width: '500px' 
      }, 5000, function() { 
       // Animation complete. 
      }); 
     else 
      $(this).animate({ 
       width: '250px' 
      }, 5000, function() { 
       // Animation complete. 
      }); 
    }); 

但这不要做任何事情:

$(".image-div").click(function() { 
     if ($(this).css('z-index') == 1) 
      $(this).css('z-index','2'); 
      $(this).animate({ 
       width: '500px' 
      }, 5000, function() { 
       // Animation complete. 
      }); 
     else 
      $(this).css('z-index','1'); 
      $(this).animate({ 
       width: '250px' 
      }, 5000, function() { 
       // Animation complete. 
      }); 
    }); 

谢谢

+0

检查是否关闭和以及关闭匿名函数 – Someone 2011-06-08 19:26:50

回答

2

看起来你需要花括号来围绕你的if ...否则,如果没有连接,那么它是浮动的。

[添加] 好吧,任何控件都需要花括号来支持多个语句。罚款不花括号,因为只有一个每个控制后声明了以下工作:

if(condition) doSomething(); 
else doSomethingElse(); 

然而,这将打破:

if(condition) 
    doSomething(); 
    doAnotherThing(); 
else 
    doSomethingElse(); 

为什么?因为如果在这种情况下,只有涉及此:

if(condition) 
    doSomething(); 

然后,你这坐出在中间的地方:

doAnotherThing(); 
else 
    doSoemthingElse(); 

doAnotherThing不包含内部的,如果(),从而既不是你的其他人{}。所以,你的其他人失去了对if和code破解的依赖。它是,恕我直言,总是使用大括号的最佳做法,因为如果你不这样做,你或其他人可能会进来并将doAnotherThing()行添加到代码中,认为它包含在if()中,并且不经意间破坏了代码。

也就是说,你的if/else都包含多个语句。所以,从严格意义上的语法点,你的代码需要:

$(".image-div").click(function() { 
    if ($(this).css('z-index') == 1) { 
     $(this).css('z-index','2'); 
     $(this).animate({ 
      width: '500px' 
     }, 5000, function() { 
      // Animation complete. 
     }); 
    } 
    else { 
     var divRef = this; 
     $(this).animate({ 
      width: '250px' 
     }, 5000, function() { 
      $(divRef).css('z-index','1'); 
     }); 
    } 
}); 
+0

哪里需要大括号?我已经更新了我的答案,但是我尝试过所有可以想到没有运气的花括号。谢谢 – Evans 2011-06-08 20:28:55

+0

好的,为你解释为什么你需要花括号和我对你的代码进行语法上的改变。显然,仍然不能保证它能够正常工作,但它在语法上应该是正确的。 – 2011-06-08 20:48:42

+0

它确实有效,但我有一个后续问题。 Z-index变化发生在动画运行后,订单是否可以更改?我希望z-index更改在else动画之后运行,但是我需要在if动画之前发生。再次感谢。 – Evans 2011-06-08 20:56:00

7

是的。否则开始{或结束}之后的if &。

此外,它看起来像在底部双});

+0

并因此'if'只被应用到这一行你:'$(本).css('z-index','2');'这是为什么可以工作,但另一个不可以。 – 2011-06-08 19:25:40

+1

是的,这本身并不是必需的语法错误。但是'else'现在是意外的,这是一个语法错误。 – 2011-06-08 19:26:15

+0

我更新了我的问题,但它仍然无法正常工作。 – Evans 2011-06-08 19:29:36