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

4

5 回答 5

51

您需要使用引号:

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

JS 小提琴演示

或者:

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

JS 小提琴演示

不带引号的 JavaScript 将变量作为参数传递给一个未定义的函数a,称为. 当您设置 CSS 属性时,您需要传递一个字符串,因此需要quotingbcrgb()

哦,而且你正在使用parseInt()它不需要传入基数,但如果你这样做会更好(并且更容易避免问题)(基数是预期的数字基数):

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

JS Fiddle 演示(在我使用的演示中105,很明显,如果使用cancel按钮,则使用默认值)。

如果有人在提示符下点击“取消”,您可能需要提供默认参数以确保传递实际的颜色值,因为cancel否则,我认为,评估为false(我假设您更喜欢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 小提琴演示

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

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 小提琴演示

参考:

于 2013-01-14T17:06:02.047 回答
1

在值周围使用引号

document.body.style.backgroundColor="rgb(" + a + "," + b + "," + c + ")";
于 2013-01-14T17:08:00.857 回答
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/

于 2013-01-14T17:08:47.773 回答
0

你没有调用函数rgb(...)

我认为你的意思是:

document.body.style.backgroundColor = "rgb(" + a + "," + b + "," + c + ");";
于 2013-01-14T17:05:54.757 回答
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() + ")";

演示

于 2013-01-14T17:08:13.480 回答