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

点击按钮时获取关联输入框值与元素ID的jQuery实现方法

问题根因

你之前的代码拿不到目标元素,是DOM层级匹配错了:
按钮被包裹在第二个<td>节点内,执行$(this).parent()时拿到的是按钮所在的td容器,再调用.prev()拿到的是和这个td相邻的上一个td(也就是包裹input的td容器),并没有选中input元素本身,自然读不到id或者value属性。

可直接复用的实现方案

针对你这种表格行内重复的「按钮-输入框」关联结构,优先用锚定共同父级再查找目标元素的写法,抗结构变动能力强,多组重复元素不用单独绑定事件:

// 绑定按钮点击事件,动态渲染的行可以把事件委托到table上,兼容后续新增的行
$('table').on('click', 'button[type="button"]', function() {
  // 先向上查找,锚定按钮所在的当前表格行,这是两个元素共有的最近父级
  const $currentTr = $(this).closest('tr');
  // 在当前行范围内查找输入框,自动匹配本行对应的input,不用硬编码id
  const $bindInput = $currentTr.find('input');

  // 以下是你需要的操作逻辑
  // 获取输入框id
  const inputId = $bindInput.attr('id');
  // 读取输入框当前数值,注意转数字类型避免字符串拼接bug
  const oldVal = Number($bindInput.val());
  // 替换成你自己的计算逻辑,示例为数值翻倍
  const newVal = oldVal * 2;
  // 将计算结果写回输入框
  $bindInput.val(newVal);
})

写法说明

  • 不要写过长的链式parent()调用:比如$(this).parent().prev().find('input')这种写法完全依赖当前固定的td相邻结构,只要后续你在按钮外面套一层标签、或者调整td顺序,代码就会直接失效。
  • 用closest('tr')锚定共同父级的写法不受内部嵌套结构影响,只要按钮和对应输入框在同一行,不管中间加多少层包裹元素都能正常匹配,多组重复tr结构下也不用单独给每个按钮、输入框写选择器,维护成本低。

基于你原有代码的修正版(不推荐长期用)

如果只是临时改现有代码生效,只需要在你原来的链式调用最后补一层查找input的逻辑即可:

alert($(this).parent().prev().find('input').attr('id'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:24:32