我一直在做一个涉及生成和更改<div>
的项目。无论如何,不得不为我正在使用的 80 个div 做<div id="drawn" onclick="changeColor(this)"></div>
会很痛苦。
我决定使用 addEventListener()
函数使单击时发生事件。
我想做的是,当单击<div>
时,其背景的颜色会改变。
当我尝试使用的代码时,我在 Javascript 控制台中得到一个Uncaught TypeError: Cannot set property 'backgroundColor' of undefined ' of null
。
这是我的代码:
function color(elment) {
elment.style.backgroundColor="orange"
}
document.getElementById("drawn").addEventListener("click", color(this), false)
是什么导致了此代码中的错误?
这是因为您不会影响事件的函数处理程序,而是在执行它。试试这个:
document.getElementById("drawn").addEventListener("click", function() { color(this); }, false)
但是由于你有 80 个div,从资源的角度来看,最好定义一个特定的函数,旨在自动更改父div 的颜色,而无需参数:
function changeDivColor() {
this.style.backgroundColor="orange"
}
然后:
document.getElementById("drawn").addEventListener("click", changeDivColor, false);
将导致 80 个div 调用相同的处理程序,而以前的系统会实例化 80 个匿名处理程序执行基本相同的操作。
编辑:有趣的是@elclanrs和我只是在同一时间发布了相同的编辑:-)
你需要传递一个匿名函数,否则this
的上下文window
而不是元素:
document.getElementById("drawn").addEventListener("click", function(){
color(this);
}, false);
您可以做的只是在color
函数中使用上下文:
function color() {
this.style.backgroundColor = "orange";
}
document.getElementById("drawn").addEventListener("click", color, false);