我使用纯JavaScript和HTML制作颜色选择器。它由三个HTML选择(下拉框)和一个div组成,其背景色将通过JavaScript进行更改。我也试图尽可能“正确地”做到这一点。这意味着HTML中没有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()调用返回null。大概是因为它们在代码运行时不存在。我试图把代码放在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>
就我所见,你的HTML根本不包括你的JavaScript代码(即,甚至没有脚本标签)。你如何运行它? – danben 2010-01-15 16:59:51
是的,为了简洁起见我把这条线留下了。我正在使用这一行: – 2010-01-15 17:05:37
嗯,我设法通过将所有内容放在window.onload中,然后使用document.getElementById ()每次,而不是分配给一个变量,然后使用变量。看起来有点丑,但它有效:s – 2010-01-15 17:07:34