这是我的代码:
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中查看)。任何人
答案 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)
aTag
是DOMNodeList
的实例,而不是来自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);
}
}