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

如何处理onClick事件点击li内部元素时无法获取li为目标的问题

核心原因

这是事件冒泡机制的正常表现:event.target指向实际触发点击的最内层DOM元素,点击li内部的p、span标签时,target自然会对应到这些子元素。


解决方案

方案1:点击事件直接绑定在li元素上

直接使用event.currentTarget即可,这个属性永远指向事件绑定的那个元素,和实际触发元素无关:

// 给所有li绑定点击事件
document.querySelectorAll('li').forEach(li => {
  li.addEventListener('click', (e) => {
    // 直接取currentTarget就是当前被点击的li
    const currentLi = e.currentTarget;
    // 后续业务逻辑
    console.log(currentLi);
  })
})

方案2:事件委托绑定在父级ul上

如果用事件委托减少绑定次数,使用Element.closest()方法向上查找最近的li元素即可:

document.querySelector('ul').addEventListener('click', (e) => {
  // 查找距离点击元素最近的li节点
  const targetLi = e.target.closest('li');
  // 判空避免点击ul空白区域无匹配的情况
  if (targetLi) {
    console.log(targetLi);
  }
})

兼容老旧浏览器的兜底方案

如果需要兼容不支持closest方法的IE等老旧浏览器,可以手动实现向上遍历查找父级li的逻辑:

function getClosestLi(el) {
  while (el && el.nodeType === 1 && el.tagName.toUpperCase() !== 'LI') {
    el = el.parentNode;
  }
  return el || null;
}

// 调用示例
document.querySelector('ul').addEventListener('click', (e) => {
  const targetLi = getClosestLi(e.target);
  if (targetLi) {
    console.log(targetLi);
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:05