addEventListener不工作,即使我确保我访问if(警报工作)。 我正在使用firefox所以现在不需要为IE安装“attachEvent”...
function addEvent(type,fnName,obj,cap)
{
if(obj.addEventListener)
{
alert("I am here");
obj.addEventListener(type,fnName,cap);
}
}
function changeBgColor()
{
var wrap = document.getElementById("wrapper");
nbClicks++;
if (1 == nbClicks )
{
wrap.style.backgroundColor = lightCoral;
}
if (2 == nbClicks )
{
wrap.style.backgroundColor = lightGreen;
}
}
function init()
{
var nbClicks = 0;
var wrap = document.getElementById("wrapper");
addEvent("click",changeBgColor,wrap,false);
}
window.onload = init;
答案 0 :(得分:2)
我在您的代码中看到两个直接问题:
JavaScript会抛出一个ReferenceError,因为函数changeBgColor中的变量nbClicks不是 。
您应该将字符串分配给wrap.style.backgroundColor。在这种情况下,JavaScript认为它们是更多的变量,并将抛出另外几个ReferenceErrors。
查看这个编辑过的代码版本,我将它全部封装在一个闭包中,所以所有函数都引用了nbClicks:
(function(){
var nbClicks = 0;
function addEvent(type,fnName,obj,cap) {
if(obj.addEventListener) {
obj.addEventListener(type,fnName,cap);
}
}
function changeBgColor() {
var wrap = document.getElementById("wrapper");
nbClicks++;
if (1 == nbClicks ) {
wrap.style.backgroundColor = 'lightCoral';
}
if (2 == nbClicks ) {
wrap.style.backgroundColor = 'lightGreen';
}
}
function init() {
var wrap = document.getElementById("wrapper");
addEvent("click",changeBgColor,wrap,false);
}
window.onload = init;
})();
答案 1 :(得分:1)
它无效,因为nbClicks
中未初始化changeBgColor
。
var
向函数声明一个局部变量,在本例中为init
。
如果您将changeBgColor
更改为
var changeBgColor = (function() {
var nbClicks = 0;
return function() {
var wrap = document.getElementById("wrapper");
nbClicks++;
if (1 == nbClicks )
{
wrap.style.backgroundColor = 'lightCoral';
}
if (2 == nbClicks )
{
wrap.style.backgroundColor = 'lightGreen';
}
};
})();
此外,backgroundColor
需要一个字符串,而不是undefined
(因为这些变量未被声明)。