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

Javascript 为什么我得到TypeError:obj.addEventListener不是一个函数?,javascript,javascript-events,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

这是我的密码:

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控制台中工作,试图在单击任何a标记时获得弹出的警报


我看不出导致此问题不起作用的问题,并在我的问题标题(在firebug中查看)中指出错误。有人吗?

文档。getElementsByTagName
返回一组DOM元素。每个元素都有一个
addEventListener
函数,但数组没有

在其上循环:

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

for(var i=0;i
aTag
DOMNodeList
的一个实例,而不是来自
DOMElement

您可以这样做:

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

但很明显,这种方法存在一个缺陷,即返回的
元素可能不止一个。
如果可能,您应该使用只返回一个元素的不同选择器。

不确定原因,但我发现在Firefox中没有定义
addEvent。我甚至找不到
addEvent()
在MDN上。我必须使用这个:

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);
    }
}
函数showWinner(){
var aTags=document.getElementsByTagName(“a”);

对于(var i=0;iIt不是数组,它是节点列表。这似乎应该可以工作,但我现在得到:referenceerror:aTags未定义。@max7是否将变量重命名为
aTags
,并在末尾加上“s”?这是因为addevent不存在:)