Why doesn't backgroundColor=rgb(a,b,c) work?

前端 未结 5 2091
情书的邮戳
情书的邮戳 2021-02-18 21:28

    
         Colors 
    

    
    

        
5条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-02-18 21:51

    You need to use quotes:

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

    JS Fiddle demo.

    Or:

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

    JS Fiddle demo.

    Unquoted the JavaScript is passing the variables, as arguments, a,b and c to an undefined function called rgb(). As you're setting a CSS property you need to pass a string, hence the requirement of quoting.

    Oh, and also you're using parseInt() which doesn't require a radix to be passed in, but it's better (and easier to avoid problems) if you do (the radix being the expected number-base):

    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 (In the demo I use 105 just so it's clear the default is being used if the cancel button is used).

    And if someone hits 'cancel' on the prompt, you might want to supply a default argument to ensure that an actual colour-value is passed, since cancel otherwise, I think, evaluates to false (I'm assuming you'd prefer 255, but obviously adjust to taste).

    You could also, of course, simply define a function:

    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

    And this approach has the (perhaps specious) benefit of allowing a custom default value to be used:

    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

    References:

    • || (logical OR) operator.
    • Array.join().
    • Element.style.
    • parseInt().

提交回复
热议问题