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

获取HTML data属性遇undefined及点击li取data-num的纯JS问题

解决点击
  • 元素获取data-num属性值的问题
  • 嘿,我来帮你搞定这个问题!你之前获取data-num得到undefined,大概率是事件绑定的方式或者属性获取的环节出了小问题。下面给你两种靠谱的纯JS实现方案,都能让你点击

  • 时准确拿到对应的data-num值:

    方案一:事件委托(推荐,尤其适合动态新增
  • 的场景)
  • 这种方法只需要给父元素<ul>绑定一次点击事件,通过事件冒泡判断点击的目标是不是<li>,效率更高:

    let locSel = document.getElementById('locationSelect');
    
    // 给ul绑定点击事件
    locSel.addEventListener('click', function(e) {
      // 确认点击的是拥有location-select类的li元素
      if (e.target.classList.contains('location-select')) {
        // 两种获取data-num的方式都可行
        const dataNum = e.target.getAttribute('data-num');
        // 或者用dataset API:const dataNum = e.target.dataset.num;
        console.log('当前点击的li的data-num值:', dataNum);
        // 这里可以添加你需要的后续逻辑,比如展示值、发送请求等
      }
    });
    

    方案二:遍历
  • 逐个绑定事件
  • 如果你的

  • 元素不会动态新增,也可以直接给每个
  • 单独绑定点击事件:

    let locSel = document.getElementById('locationSelect');
    // 获取所有带location-select类的li元素
    const locationItems = locSel.querySelectorAll('.location-select');
    
    // 遍历每个li绑定点击事件
    locationItems.forEach(item => {
      item.addEventListener('click', function() {
        // 这里用this就可以指代当前点击的li元素
        const dataNum = this.dataset.num;
        // 或者用getAttribute:const dataNum = this.getAttribute('data-num');
        console.log('当前点击的li的data-num值:', dataNum);
      });
    });
    

    关于你之前得到undefined的可能原因:

    • 可能没有判断点击目标就直接获取属性,比如点击到了<ul>本身,而它没有data-num属性,自然返回undefined;
    • 可能错误地使用了属性获取方式,比如把dataset.num写成了dataset.dataNum(data-num对应的dataset属性是num,不是驼峰的dataNum);
    • 可能没有正确选中<li>元素,比如直接操作了父元素<ul>去获取data-num。

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

  • 相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.05.26 09:24:24