'Using javascript to change rgb value of background onclick

I'm trying to implement a very simple JavaScript program: every time you click the button, the RGB values of the background color are randomized.

Here's the Javascript:

function change() {
    var x = Math.floor(Math.random() * 256); // range is 0-255
    var y = Math.floor(Math.random() * 256);
    var z = Math.floor(Math.random() * 256);
    var thergb = "'rgb(" + x + "," + y + "," + z + ")'"; 
    console.log(thergb);
    document.body.style.background=thergb;
}

I'm pretty sure the problem is in how I hack together the thergb variable, but there are no errors in the console so I'm not quite sure. I log the console just to make sure it's giving me an actual random rgb, which it is.

Here's the full JSFiddle: http://jsfiddle.net/L92bY/



Solution 1:[1]

The CSS syntax for an rgb() value does not include single quotes.

Change 'rgb(x,y,z)' to rgb(x,y,z).

Solution 2:[2]

Two things:

  1. You need to choose one of the "nowrap" options for where the fiddle server puts your code.
  2. You need to get rid of the single-quote characters around your "rgb()" expression.

        var thergb = "rgb(" + x + "," + y + "," + z + ")"; 
    

Personally I'd set "backgroundColor" instead of just "background", but it works (in Firefox at least) to set "background".

Fixed fiddle.

Solution 3:[3]

Working fiddle (just corrected your code): http://jsfiddle.net/L92bY/18/

The syntax for the CSS color as rgb is rgb(r,g,b) (no extra apostrophe "'") = not 'rgb(r,g,b)'

function change() {
    var x = Math.floor(Math.random() * 256); // range is 0-255
    var y = Math.floor(Math.random() * 256);
    var z = Math.floor(Math.random() * 256);
    var thergb = "rgb(" + x + "," + y + "," + z + ")"; 
    console.log(thergb);
    document.body.style.background=thergb;
}

PS: If this is not working for you you are calling this javascript function BEFORE it was declared.

Solution 4:[4]

You could probably also just simplify where your code went wrong by using string template literals.

var thergb = `rgb(${x}, ${y}, ${z})`

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Quentin
Solution 2 Pointy
Solution 3 jave.web
Solution 4 Guy Buchanan