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は、変数を引数としてabおよびとc呼ばれる未定義の関数に渡しますrgb()。CSSプロパティを設定するときは、文字列を渡す必要があるため、引用符で囲む必要があります。

ああ、また、基数を渡す必要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 に答える