2

嘿,我想知道这两个代码有什么区别?第一个有效,第二个无效?

First >>
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({'margin-left':$masterWidth});
...
}

Second >>
$propToAnimate = 'margin-left';
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({$propToAnimate:$masterWidth});
...
}
4

2 回答 2

6

这是一个有效的解决方案......

$propToAnimate = {'margin-left': $masterWidth};
$($sequencingArray[i]).delay(i*100).animate($propToAnimate);

“您不能将变量用作对象文字内的属性名称。” 从这里

于 2011-06-05T15:57:19.440 回答
0

当您使用{'margin-left':$masterWidth}{$propToAnimate:$masterWidth}创建对象时。因此,当我们使用Object Initializer ( {k0:v0, k1:v1}) 语法创建对象时,我们需要知道自己在做什么。

最重要的是,对于您的情况var a = {prop:20}var a = {'prop':20}两者都会做完全相同的事情——创建一个具有一个名为prop. var prop = 'different'如果您已经在其他地方说过,则无关紧要,prop在使用时仅将其视为文字名称{prop:20}并且不进行评估。

要使代码的第二个版本正常工作,您可以做的是利用a['prop']对象的语法。所以像:

var prop = 'margin-left';
var obj = {}; // Create a new object with no propeties
obj[prop] = masterWidth; // Add a new property to obj (using the value of the variable prop as the name of the new property)

然后你会有obj['margin-left'] == masterWidth. 你可以在动画函数中使用这个对象......animate(obj);

我希望我没有太混乱!

于 2011-06-05T17:12:36.107 回答