为什么backgroundColor = rgb(a,b,c)不起作用?

时间:2013-01-14 17:03:27

标签: javascript html

<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值变化?我做错了什么?

5 个答案:

答案 0 :(得分:41)

您需要使用引号:

document.body.style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ')';

JS Fiddle demo

或者:

document.body.style.backgroundColor = 'rgb(' + [a,b,c].join(',') + ')';

JS Fiddle demo

未加引号 JavaScript将变量作为参数abc传递给名为rgb()的未定义函数。在您设置CSS属性时,您需要传递一个字符串,因此需要引用

哦,而且你还在使用parseInt(),但

如果你这样做( radix 是预期的数字基数):

var a = parseInt(prompt("Enter R"), 10) || 255,
    b = parseInt(prompt("Enter G"), 10) || 255,
    c = parseInt(prompt("Enter B"), 10) || 255;

JS Fiddle demo(在演示中我使用105只是为了清除默认情况下,如果使用 cancel 按钮,则会使用默认值。

如果有人点击&#39;取消&#39;在提示符上,您可能希望提供一个默认参数以确保传递实际的颜色值,因为 cancel 否则,我认为,评估为false(我&#39; m假设你更喜欢255,但显然要适应口味)。

当然,您也可以简单地定义一个函数:

function rgb(r,g,b) {
    return 'rgb(' + [(r||0),(g||0),(b||0)].join(',') + ')';
}
  var a = parseInt(prompt("Enter R"), 10),
      b = parseInt(prompt("Enter G"), 10),
      c = parseInt(prompt("Enter B"), 10);
  document.body.style.backgroundColor = rgb(a,b,c);

JS Fiddle demo

这种方法具有允许使用自定义默认值的(可能是似是而非的)好处:

function rgb(r,g,b, def) {
def = parseInt(def, 10) || 0;
    return 'rgb(' + [(r||def),(g||def),(b||def)].join(',') + ')';
}
var a = parseInt(prompt("Enter R"), 10),
    b = parseInt(prompt("Enter G"), 10),
    c = parseInt(prompt("Enter B"), 10);
document.body.style.backgroundColor = rgb(a,b,c,40);

JS Fiddle demo

参考文献:

答案 1 :(得分:1)

在值

周围使用引号
document.body.style.backgroundColor="rgb(" + a + "," + b + "," + c + ")";

答案 2 :(得分:1)

rgb需要用引号:

<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>

jsFiddle http://jsfiddle.net/pduQ6/

答案 3 :(得分:0)

您没有名为rgb(...)

的功能

我认为你的意思是:

document.body.style.backgroundColor = "rgb(" + a + "," + b + "," + c + ");";

答案 4 :(得分:0)

问题是颜色需要是一个字符串:

var a = parseInt(prompt("Enter R"),10);
var b = parseInt(prompt("Enter G"),10);
var c = parseInt(prompt("Enter B"),10);
document.body.style.backgroundColor = "rgb(" + [a,b,c].join() + ")";

Demo