javascript如何评估参数?

时间:2009-07-12 08:44:26

标签: javascript jquery

我编写了一个简单的javascript函数,在JQuery ProgressBar的帮助下显示了一个进度条(http://t.wits.sg/misc/jQueryProgressBar/demo.php#

可以将progressBar函数设置为显示具有不同值的不同背景图像。我希望将[0,MAX * 0.3]中的值显示为红色,将(MAX * 0.3,MAX * 0.7)显示为橙色,将(MAX * 0.7,MAX)显示为绿色。所以我写了一个如下的辅助函数:

function setBar(bar, cur, total) {
    var v1 = parseInt(total * 0.3);
    var v2 = parseInt(total * 0.7);

    // if I run alert(v1) and alert(v2) here, the values are all right.

    bar.progressBar(cur, {
        max: total,
        textFormat: 'fraction',
        boxImage: '/img/pbar/progressbar.gif',
        barImage: {
            0:  '/img/pbar/progressbg_red.gif',
            v1: '/img/pbar/progressbg_orange.gif',
            v2: '/img/pbar/progressbg_green.gif'
        }
    });
}

参数 cur 是当前值,而 total 是进度条的MAX值。该功能似乎不起作用,但当我用“50和120”这样的实际值替换“v1:”和“v2:”时,该功能运行良好。在调用bar.progressBar之前,我还检查了 v1 和v2的值,它们没问题。

所以问题似乎是我无法将变量而不是常量传递给函数bar.progressBar,我认为它可能与javascript参数评估顺序有关系,是否有解决此问题的方法?

3 个答案:

答案 0 :(得分:6)

尝试在传递之前构建对象:

var barImageObj = {};
barImageObj[0] = '/img/pbar/progressbg_red.gif';
barImageObj[v1] = '/img/pbar/progressbg_orange.gif';
barImageObj[v2] = '/img/pbar/progressbg_green.gif';

bar.progressBar(cur, {
    max: total,
    textFormat: 'fraction',
    boxImage: '/img/pbar/progressbar.gif',
    barImage: barImageObj
});

问题在于javascript将{a:'foo'}{'a':'foo'}作为对象使用字符串键“a”,而不是变量a的值恰好是

答案 1 :(得分:3)

你的问题在

barImage: {
            0:  '/img/pbar/progressbg_red.gif',
            v1: '/img/pbar/progressbg_orange.gif',
            v2: '/img/pbar/progressbg_green.gif'
        }

当使用对象文字形式时,元素名称被视为文字,即v1和v2是变量的事实没有效果,你创建的对象有元素0,'v1'和'v2'。

做你想要的事情

barImage = { };

barImage[0] = '/img/pbar/progressbg_red.gif';
barImage[v1] = '/img/pbar/progressbg_orange.gif';
barImage[v2] = '/img/pbar/progressbg_green.gif';

答案 2 :(得分:0)

问题可能是v1和v2是浮点数而不是字符串。你是 将它们用作javascript对象上的键。

尝试将它们转换为整数,然后再转换为字符串,如果仍然无效的话。