<html> <head> <title> Colors </title> </head> <body> <script type="text/javascript"> var a = parseInt(prompt("Enter R")); var b = parseInt(prompt("Enter G")); var c = parseInt(prompt("Enter B")); document.body.style.backgroundColor=rgb(a,b,c); </script> </body> </html>
为什么背景颜色根据RGB值而不同?我做错了什么?
解决方法
您需要使用引号:
document.body.style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ')';
要么:
document.body.style.backgroundColor = 'rgb(' + [a,c].join(',') + ')';
不引用JavaScript将变量作为参数a,b和c传递给一个名为rgb()的未定义函数.当您设置CSS属性时,您需要传递一个字符串,因此需要引用.
哦,你也使用parseInt(),它不需要传入一个基数,但是如果你这样做(基数是预期的数字基数),它会更好(并且更容易避免问题)):
var a = parseInt(prompt("Enter R"),10) || 255,b = parseInt(prompt("Enter G"),c = parseInt(prompt("Enter B"),10) || 255;
JS Fiddle demo(在演示中,我使用105,所以很明显,如果使用取消按钮,则使用默认值).
如果有人在提示符下点击“取消”,您可能需要提供一个默认参数,以确保实际的颜色值被传递,否则,否则我认为评估为false(假设你更喜欢255,但明显调整味道).
您当然也可以简单地定义一个函数:
function rgb(r,g,b) { return 'rgb(' + [(r||0),(g||0),(b||0)].join(',') + ')'; } var a = parseInt(prompt("Enter R"),10),10); document.body.style.backgroundColor = rgb(a,c);
而且,这种方法有可能允许使用自定义默认值(或许似是而非)的好处:
function rgb(r,def) { def = parseInt(def,10) || 0; return 'rgb(' + [(r||def),(g||def),(b||def)].join(',') + ')'; } var a = parseInt(prompt("Enter R"),10); document.body.style.backgroundColor = rgb(a,c,40);
参考文献:
> ||
(logical OR
) operator.
> Array.join()
.
> Element.style
.
> parseInt()
.