You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环为li元素绑定EventHandler出现TypeError的问题求助

嘿,别慌,我来帮你搞定这个问题~

先揪出代码里的两个坑:

1. 方法名拼写错啦

你写的getElementByTagName少了个s!正确的应该是getElementsByTagName——因为这个方法会返回一堆匹配的元素(HTML集合),所以是复数形式的Elements。拼写错的话,lis就会变成undefined,后续循环肯定出问题。

2. 箭头函数的小陷阱+文本获取方式不对

你用了箭头函数当点击事件处理函数,箭头函数的this不会指向你点击的那个<li>,而是跟着外部作用域走。另外,如果你直接尝试输出元素对象,就会触发那个“无法将对象转换为原始值”的错误——你要的是衬衫名称,也就是元素里的文本内容,不是元素本身呀!

修正后的完整代码

<h3>Shirts</h3>
<ul id='list'>
  <li>Biker Jacket</li>
  <li>Mens Shirt</li>
</ul>

<script>
// 先把方法名改对
var lis = document.getElementById("list").getElementsByTagName('li');
for(var i = 0; i < lis.length; i ++){
  lis[i].onclick = (event) => {
    // 通过event.target拿到点击的元素,再用textContent取文本
    console.log(event.target.textContent.trim());
  }
}
</script>

额外小技巧

如果你不想用箭头函数,换成普通函数的话,this就会直接指向当前点击的<li>,代码可以写成这样:

lis[i].onclick = function() {
  console.log(this.textContent.trim());
}

这里的trim()是用来去掉文本前后可能藏着的空格,让输出更清爽,要是你确定文本没多余空格,也可以不用它~

内容的提问来源于stack exchange,提问作者Lkoprivica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:31