2013-12-12 53 views
2

我在一个相对简单的HTML文件中有一个按钮元素。我想添加事件侦听器,但我不断收到错误,我不知道为什么:Uncaught TypeError: Object #<NodeList> has no method 'addEventListener'Uncaught TypeError:Object#<NodeList> has no method'addEventListener'

我努力学习“的addEventListener”方法,但我不明白这有什么错什么我做:

HTML:

<button>guess</button>

JS:

var myButton = document.getElementsByTagName('button'); 

myButton.addEventListener('click', doSomething, false); 

var doSomething = function(e){ 
    console.log('I was clicked!'); 

    e.preventDefault(); 
    return false; 
}; 

谢谢那些帮助谁编辑。

总之对可能遇到此问题的任何其他新手:

  1. 当您使用document.getElementsByTagName()或返回的NodeList任何其他方法,你必须指定要操纵哪个节点。
  2. 请确保您在之后添加了事件侦听器该函数已被声明。

回答

8

getElementsByTagName('button')返回一个列表,而不是元素。您需要将EventListener添加到该列表中的第一个元素。

尝试:

var myButton = document.getElementsByTagName('button')[0]; 
+0

非常感谢。这是一个非常简单,直接的解释,而且很有效。 – Lindsay

1

试试这个:

var myButton = document.getElementsByTagName('button')[0]; 
3

getElementsByTagName()返回元素的列表,一个节点列表,并addEventListener一次只能工作一个单一的元素,所以这是很好的形式重复,这样你赢了”吨得到拧,如果你决定有一个以上的元素,你就习惯了编写事件处理这样

var myButton = document.getElementsByTagName('button'); 

var doSomething = function(e){ 
    e.preventDefault(); 
    console.log('I was clicked!'); 
}; 

for (var i=myButton.length; i--;) { 
    myButton[i].addEventListener('click', doSomething, false); 
} 
+0

非常感谢您的输入!我希望我可以选择你所有的答案。这也起作用,它绝对没有任何硬编码的东西。不过谢谢你,以后当我进入更复杂的事情时,我可能会使用你的方法。 :) – Lindsay

相关问题