0

addEventListener 不工作,即使我确保我访问 if(警报有效)。我正在使用Firefox,所以现在不需要为IE“附加事件”......

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;
4

2 回答 2

2

我在您的代码中看到了两个直接问题:

  1. JavaScript 将抛出 ReferenceError,因为变量 nbClicks 不在函数 changeBgColor的范围内

  2. 您应该将字符串分配给 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;

})();
于 2013-07-25T16:21:34.450 回答
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(因为没有声明这些变量)。

于 2013-07-25T16:21:09.120 回答