我编写了一个简单的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参数评估顺序有关系,是否有解决此问题的方法?
答案 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对象上的键。
尝试将它们转换为整数,然后再转换为字符串,如果仍然无效的话。