为什么我得到TypeError:obj.addEventListener不是函数?

时间:2013-03-18 19:16:32

标签: javascript javascript-events

这是我的代码:

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener(type, fn, false);
}

function alertWinner(){
    alert("You may be a winner!");
}

function showWinner (){
    var aTag = document.getElementsByTagName("a");
    addEvent(aTag, 'click', alertWinner);
}

showWinner();

基本上,我正在使用firebug控制台并尝试在点击任何标签时弹出警告。

我看不出导致此问题无法解决的问题,并且在我的问题标题中给出了错误(在firebug中查看)。任何人

3 个答案:

答案 0 :(得分:37)

document.getElementsByTagName返回NodeList个DOM元素。每个元素都有一个addEventListener函数,但该数组没有。

循环遍历:

function showWinner (){
    var aTags = document.getElementsByTagName("a");
    for (var i=0;i<aTags.length;i++){
        addEvent(aTags[i], 'click', alertWinner);
    }
}

答案 1 :(得分:7)

aTagDOMNodeList的实例,而不是来自DOMElement

你可以这样做:

var aTags = document.getElementsByTagName("a");
var aTag = aTags[0];

但显然这种方法存在缺陷,因为可能会返回多个a元素。如果可能,您应该使用另一个只返回一个元素的选择器。

答案 2 :(得分:4)

不确定原因,但我在Firefox中获得了addEvent is not defined。我甚至无法在MDN上找到addEvent()。我不得不用这个:

function showWinner (){
    var aTags = document.getElementsByTagName("a");
    for (var i=0;i<aTags.length;i++){
        // addEvent(aTags[i], 'click', alertWinner);
        aTags[i].addEventListener("click", alertWinner);
    }
}