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

JS动态渲染HTML列表点击时e.target.id为空无法获取对象值问题

问题根因

你在动态创建<li>列表项时,没有给元素设置id属性,也没有把对象的对应属性挂载到DOM元素上,所以点击时读取e.target.id返回空属于正常现象。

修复方案

我们可以用HTML5规范支持的data-*自定义属性来挂载数据,这种方式灵活度更高,也不会和原生DOM属性冲突:

1. 修改列表生成逻辑

给每个<li>添加自定义属性,存储对应对象的索引或者需要直接读取的属性:

for (let i = 0; i < listOfTierObjects.length; i++) {
  const currentItem = listOfTierObjects[i];
  document.getElementById("tiereList").innerHTML += `<li 
    data-index="${i}" 
    data-name="${currentItem.name}"
    data-id="${currentItem.idNummer}"
  >${currentItem.name}</li>`;
};

2. 修改点击事件逻辑

从点击目标的自定义属性中读取数据,也可以通过索引直接获取完整的原始对象:

document.getElementById("tiereList").onclick = function(e) {
  // 仅处理点击li元素的场景,避免点击列表空白区域误触发
  if (e.target.tagName === 'LI') {
    // 读取自定义属性
    const clickedName = e.target.dataset.name;
    const clickedId = e.target.dataset.id;
    // 通过索引直接获取完整对象,可读取所有属性
    const fullObj = listOfTierObjects[Number(e.target.dataset.index)];
    
    console.log('点击项的name值:', clickedName);
    console.log('点击项的完整对象:', fullObj);
  }
}

其他说明

如果一定要用id属性来取值,只需要在生成<li>时给标签添加id属性即可,注意id不能重复,建议用业务唯一的idNummer作为id值:

// 示例:给li加id属性
document.getElementById("tiereList").innerHTML += `<li id="${currentItem.idNummer}">${currentItem.name}</li>`;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:07