我正在使用纯JavaScript和HTML制作颜色选择器。它由三个HTML选择(下拉框)和一个div组成,其背景颜色将由JavaScript更改。我也试图尽可能“正确”地做到这一点。这意味着HTML中没有Javascript代码。
到目前为止我的代码看起来像这样:
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>
答案 0 :(得分:3)
将代码放在onload事件的处理程序中工作得很好,并且被广泛接受。所以将函数放在函数中(取决于原因)。
var mypage = {
red: null,
green: null,
blue: null,
colourbox: null,
d2h: function(d) {
var hex = d.toString(16);
if (hex.length < 2) {
hex = '0' + hex;
}
return hex.toUpperCase();
},
h2d: function(d) {
return parseInt(h, 16);
},
update: function() {
mypage.colourbox.style.backgroundColor = '#' + mypage.d2h(mypage.red.value) + mypage.d2h(mypage.green.value) + mypage.d2h(mypage.blue.value);
}
};
window.onload = function() {
mypage.red = document.getElementById('red');
mypage.red.onchange = mypage.update;
mypage.green = document.getElementById('green');
mypage.green.onchange = mypage.update;
mypage.blue = document.getElementById('blue');
mypage.blue.onchange = mypage.update;
mypage.colourbox = document.getElementById('colourbox');
}
以下是dean edwards关于使用window.onload
的blog post另一种选择是将您的javascript放在页面底部而不是顶部。
答案 1 :(得分:2)
正如其他人所说,你需要将你的代码包装在一个函数中并从window.onload事件中调用它。
同样当你为一个事件分配一个函数时,只使用名称(没有括号)或者在那里调用函数然后..
所以
red.onchange = update();
应该是
red.onchange = update;