Я делаю палитру цветов, используя чистый JavaScript и HTML. Он состоит из трех элементов выбора HTML (выпадающих списков) и одного элемента div, цвет фона которого будет изменен JavaScript. Я также пытаюсь сделать это как можно более «правильно». Это означает отсутствие кода Javascript в HTML.
Пока мой код выглядит так:
var red = document.getElementById('red');
red.onchange = update();
var green = document.getElementById('green');
green.onchange = update();
var blue = document.getElementById('blue');
blue.onchange = update();
var thebox = document.getElementById('colourbox');
function d2h(d) {return d.toString(16);}
function h2d(h) {return parseInt(h,16);}
function update(){
finalcolor = '#' + d2h(red.value) + d2h(green.value) + d2h(blue.value)
thebox.style.background = finalcolour;
}
А HTML выглядит так:
<div id="colourbox"></div>
<form name="myform" action="colour.html">
<select name="red" id="red">
<option value="0">0</option>
.... etc etc ....
</select>
<select name="green" id="red">
<option value="0">0</option>
.... etc etc ....
</select>
<select name="blue" id="red">
<option value="0">0</option>
.... etc etc ....
</select>
</form>
Проблема в том, что все вызовы document.getElementById () возвращают ноль. Предположительно, потому что они не существуют во время выполнения кода. Я попытался поместить код в window.onload = function () {}, но a), который только сбивает с толку, и b) Затем мне нужно было бы определить функцию обновления внутри функции, что кажется неправильным.
Кто-нибудь может пролить свет на это? Существуют ли общие правила, которые могут помочь мне понять, как это работает? Или какая-то документация по теме?
РЕДАКТИРОВАТЬ: исправленный код:
<script type="text/javascript">
window.onload = function(){
var red = document.getElementById('red');
red.onchange = update();
var green = document.getElementById('green');
green.onchange = update();
var blue = document.getElementById('blue');
blue.onchange = update();
var thebox = document.getElementById('colourbox');
function d2h(d) {return d.toString(16);}
function h2d(h) {return parseInt(h,16);}
function update(){
var finalcolor = '#' + d2h(document.getElementById('red').value) + d2h(document.getElementById('green').value) + d2h(document.getElementById('blue').value);
document.getElementById('colourbox').style.background = finalcolor;
}
}
</script>