将字符串值传递给动画Jquery函数时出现问题

时间:2011-06-05 15:28:08

标签: jquery string variables jquery-animate assign

嘿,我想知道这两个代码有什么区别?第一个工作,但第二个不工作?

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});
...
}

2 个答案:

答案 0 :(得分:6)

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

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

“您不能将变量用作对象文字中的属性名称。” from here

答案 1 :(得分: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函数中使用此对象... animate(obj);

我希望我不会太困惑!