为什么这个变量在JQuery中没有正确传递

时间:2014-02-17 22:13:42

标签: javascript jquery variables

我有一个简单的JQuery声明......我的问题是,为什么世界上其中一个会失败?

让我们假设变量colorAttributecolor

    $(thisCLass).css( "color", '#'+hex ); // Works when written
    $(thisCLass).css( colorAttribute, '#'+hex ); // Works with variable

    $(thisCLass).css({ "color" : '#'+hex }); // Works when written  
    $(thisCLass).css({ colorAttribute : '#'+hex }); // Does not Work with variable

关于为什么会失败的任何想法?

7 个答案:

答案 0 :(得分:5)

那是因为你不能使用变量来指定对象文字中的名字。

对象文字中的标识符可以使用或不使用引号编写,因此在任何一种情况下都不会将其解释为变量。该对象最终将使用您指定的标识符:

{ "colorAttribute" : '#'+hex }

您可以使用变量在对象中设置属性,但是您必须先创建对象并使用括号语法:

var obj = {};
obj[colorAttribute] = '#'+hex;
$(thisCLass).css(obj);

答案 1 :(得分:4)

它无法正常工作,因为您无法在JavaScript中执行此操作。在对象文字中,属性声明的左侧是字符串文字或标识符。如果它是一个标识符,则标识符本身使用,就好像它是一个字符串文字。

您可以创建一个对象,然后从变量填充属性:

var cssProps = {};
cssProps[colorAttribute] = '#' + hex;
$(thisClass).css(cssProps);

答案 2 :(得分:4)

因为第二个成为只有一个属性的对象:“colorAttribute”。

你应该这样做:

myobj = {};
myobj[collorAttribute] = "#"+hex;
$(thisClass).css(myobj);

也许你是一个python程序员,但javascript与dicts(这里的对象)不一样。它经常发生。

答案 3 :(得分:4)

对象文字/初始值设定项仅为其名称使用标识符键,而不是它们可能表示为变量的任何值。所以......

{ colorAttribute: '#' + hex }

...使用名为Object的密钥定义"colorAttribute"

您必须使用括号表示法根据变量命名键:

var css = {};
css[colorAttribute] = '#' + hex;
$(thisClass).css(css);

答案 4 :(得分:3)

您不能使用属性名称的变量声明javascript对象文字。文字中的属性名称必须是实际的属性名称,而不是变量。

相反,如果要在对象表单中使用变量,则必须先构造对象,然后将其传入:

var obj = {};
obj[colorAttribute] = '#'+hex;
$(thisCLass).css(obj);

答案 5 :(得分:2)

当您执行{ colorAttribute : '#'+hex }时,您正在使用名为“colorAttribute”的属性创建一个新对象。

我不确切知道你需要什么,但你可以试试

var cssObject = {};
cssObject[colorAttribute] = '#'+hex;
//cssObject[otherAttribute] = 'otherValue';
$(thisCLass).css(cssObject);

希望这有用。

答案 6 :(得分:2)

在写下你想要做的事情之前,你需要一步:

首先创建一个变量:

var color = new Object();
color.colorAttribute = '#'+hex

$(thisCLass).css(color);