未捕获的类型错误:对象#<节点列表>没有方法'addEventListener'
Uncaught TypeError: Object #<NodeList> has no method 'addEventListener'
我在一个相对简单的HTML文件中有一个按钮元素。我正在尝试添加一个事件侦听器,但不断出现错误,我不确定原因: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;
};
感谢那些提供帮助的人。
总之,对于任何其他可能遇到此问题的新手:
- 当使用
document.getElementsByTagName()
或任何其他返回NodeList的方法时,必须指定要操作的节点 - 请确保在声明函数之后添加事件侦听器
getElementsByTagName('button')
返回一个列表,而不是一个元素。您需要将EventListener添加到该列表中的第一个元素中。
尝试:
var myButton = document.getElementsByTagName('button')[0];
getElementsByTagName()
返回一个元素列表,一个nodeList,而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);
}
试试这个:
var myButton = document.getElementsByTagName('button')[0];
相关文章:
- 参数列表(节点)后缺少)
- 节点证书存储,节点仅从硬编码的证书列表中读取
- querySelectorAll返回空节点列表
- 未捕获的类型错误:对象#<节点列表>没有方法'addEventListener'
- 从HTML代码段创建节点列表后,.find()未按预期工作
- 如何使用onclick javascript动态添加,删除列表中的节点
- 如何以有效的方式按给定数组对节点列表进行排序
- 循环遍历节点列表 JS
- 为 Javascript 节点列表返回的长度无效
- 在节点中实现依赖选项列表.js + express
- 从 2 个得分最高的节点列表中获取 3 个节点(我自己设置的属性)
- 如何获取所有可用节点.js模块的列表
- 在节点列表中查找节点
- 当我尝试打印到文本区域字段中时,数据被[对象节点列表]替换
- 节点列表操作
- 在 d3.js 中填充已连接节点的选择列表
- 合并两个节点列表而不重复
- 如何从节点和链接列表创建 d3 径向树
- 如何从 d3 节点层次结构创建 ul-li 列表
- 如何生成视图,点击ExtJS中的树列表节点后