开发者

Dynamically generated object not working as parameter to .css()

开发者 https://www.devze.com 2023-03-21 15:41 出处:网络
I have this function: function myfunc(obj, properties, value) { $.each(properties, function(i, key) { var a = \'-webkit-border-\' + key + \'-radius\';

I have this function:

function myfunc(obj, properties, value) {       
    $.each(properties, function(i, key) {
        var a = '-webkit-border-' + key + '-radius';
        var b = '-moz-border-radius-' + key.replace(/\-/g, '');
        var c = 'border-' + key + '-radius';
        var z = value+'px';
         obj.css({a : z, b: z,开发者_高级运维 c: z});
    });
}

Called like this:

myfunc($tab, ['top-left', 'top-right'], defaults.tabRounded);

Note that if I replace the obj.css line with:

obj.css({'border-top-right-radius': value+'px'});

It works as intended. Yet the values of a, b, c are completely correct.

What is going on?


The keys of an object literal in JavaScript are strings, not variables. If you do not quote them yourself, they are auto-quoted. So if you write

var a = {b: 1};

it's the same as if you had written

var a = {'b': 1};

You have to use [] to set keys dynamically.

var a = {};
a[b] = 1;

In this case modify your function to

function myfunc(obj, properties, value) {       
    $.each(properties, function(i, key) {
        var a = '-webkit-border-' + key + '-radius';
        var b = '-moz-border-radius-' + key.replace(/\-/g, '');
        var c = 'border-' + key + '-radius';
        var z = value+'px';
        var css = {};
        css[a] = css[b] = css[c] = z;
         obj.css(css);
    });
}
0

精彩评论

暂无评论...
验证码 换一张
取 消