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

jQuery点击表格行获取TD ID时出现undefined错误求助

解决点击TD获取ID时返回undefined的问题

嘿,这个问题我太熟了!你遇到的弹窗为空、控制台显示undefined的问题,根源出在箭头函数的this指向上面,下面给你一步步拆解原因和解决方案:

问题原因

你在$("td").click()里用了箭头函数(e) => {},箭头函数不会绑定自己的this,它的this会继承自外层的作用域(也就是chooseCell函数的this),而不是触发点击事件的<td>元素。所以$(this)根本不是指向你点击的单元格,自然拿不到id属性,返回undefined。

解决方案

这里有几种靠谱的解决方式,你可以根据需求选:

1. 把箭头函数改成普通函数

普通函数的this会自动指向触发事件的DOM元素,也就是你点击的<td>,这样就能正常获取id了:

function chooseCell() {
  let square = 0;
  let squareNumber = 0;
  $("td").click(function(e) { // 替换箭头函数为普通函数
    let data = $(this).attr('id');
    alert(data);
    // 后续你的循环逻辑,注意把&am改成&&哦,应该是打错了
    for (square in squarePositions) {
      squareNumber += 1;
      if (square[1] <= e.pageX && e.pageX <= square[3] && ...) {
        // 你的业务逻辑
      }
    }
  });
}

2. 使用事件对象的target或currentTarget

如果你不想改箭头函数,可以用事件参数e里的元素来获取点击的单元格:

  • e.target:点击的实际元素(如果td里有子元素,比如<span>,点击子元素时target就是这个子元素)
  • e.currentTarget:绑定事件的元素(永远是<td>,不管你点击的是td本身还是它的子元素)

示例代码:

function chooseCell() {
  let square = 0;
  let squareNumber = 0;
  $("td").click((e) => {
    // 方法A:用currentTarget(推荐,确保拿到的是绑定事件的td)
    let data = $(e.currentTarget).attr('id');
    // 方法B:如果td有子元素,用closest确保拿到父级td
    // let data = $(e.target).closest('td').attr('id');
    alert(data);
    // 后续循环逻辑
    for (square in squarePositions) {
      squareNumber += 1;
      if (square[1] <= e.pageX && e.pageX <= square[3] && ...) {
        // 你的业务逻辑
      }
    }
  });
}

另外注意你代码里的&am应该是&&的笔误,这个也要修正,不然条件判断会出错哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:08:14