addEventListener似乎不起作用

时间:2013-07-25 16:05:27

标签: javascript addeventlistener

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;

2 个答案:

答案 0 :(得分:2)

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

  1. JavaScript会抛出一个ReferenceError,因为函数changeBgColor中的变量nbClicks不是

  2. 您应该将字符串分配给wrap.style.backgroundColor。在这种情况下,JavaScript认为它们是更多的变量,并将抛出另外几个ReferenceErrors。

  3. 查看这个编辑过的代码版本,我将它全部封装在一个闭包中,所以所有函数都引用了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(因为这些变量未被声明)。