Ответ 1
Вам нужно использовать кавычки:
document.body.style.backgroundColor = 'rgb(' + a + ',' + b + ',' + c + ')';
Или:
document.body.style.backgroundColor = 'rgb(' + [a,b,c].join(',') + ')';
Без кавычек JavaScript передает переменные в качестве аргументов a
, b
и c
в функцию undefined, называемую 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 используется).
И если кто-то ударит "отменить" в приглашении, вы можете указать аргумент по умолчанию, чтобы убедиться, что передано фактическое значение цвета, поскольку cancel в противном случае, я думаю, оценивается как false
(I ' Предположим, вы предпочтете 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);
И этот подход имеет (возможно, благоразумие) преимущество использования пользовательского значения по умолчанию:
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);
Литература: