如何在 DataTable 中通过复选框联动填充相邻列的输入框

16次阅读

如何在 DataTable 中通过复选框联动填充相邻列的输入框

本文详解如何在 datatable 表格中,当用户勾选带有 `data-sisa` 属性的复选框时,自动将对应 `sisa` 值填入同一行右侧“diterima”列的数字输入框中,并支持多选批量赋值。

在使用 DataTable 渲染动态表格时,常需实现「勾选即填充」的交互逻辑——例如本例中:每行复选框携带 data-sisa 值,勾选后需将该值写入同级行中 class=”open-input” 的 元素(位于“diterima”列)。关键挑战在于精准定位目标输入框(不能全局用 #inputID,因 ID 重复会导致仅首行生效)。

✅ 正确做法:基于 dom 结构就近查找

你的原始代码中使用 $(“#inputID”).val(sisa) 存在严重问题:id=”inputID” 在多行中重复,违反 html 唯一性规范,jquery 仅匹配第一个元素。应改用相对定位——从触发事件的复选框出发,向上找到所在

,再向下查找本行内 .open-input 输入框:

$('body').on('change', 'input[type="checkbox"].editor-active', function() {     const $checkbox = $(this);     const sisa = $checkbox.data('sisa'); // 安全读取 data-sisa     const $input = $checkbox.closest('tr').find('.open-input');      if ($input.length) {         $input.val(this.checked ? sisa : 0);     } });

? 为什么这样更可靠?

  • closest(‘tr’) 确保跨列操作严格限定在当前数据行
  • find(‘.open-input’) 利用类名而非 ID,避免重复 ID 冲突;
  • 显式判断 this.checked,支持取消勾选时清空或重置为 0;
  • 事件委托绑定到 body,兼容 DataTable 动态渲染的行节点。

⚠️ 注意事项与增强建议

  • 移除重复 ID:修改 DataTable 列定义,将 id=”inputID” 改为 class=”open-input”(你已部分做到),并删除所有 id 属性:
    {"data": "id", "class": "text-center",   render: function () {      return '';  } }
  • 支持多选批量填充:上述逻辑天然支持多选——每次勾选/取消均独立触发,各行互不影响。
  • 防 NaN 输入:若 sisa 可能为空或非数字,可增加校验:
    const safeSisa = number(sisa) || 0; $input.val(this.checked ? safeSisa : 0);
  • 视觉反馈:可添加 disabled 或 readonly 控制,避免手动修改被覆盖(按需启用)。

通过此方案,你不仅能准确完成单行联动,还能确保表格扩展性与维护性,真正实现「所见即所得」的数据驱动交互。

text=ZqhQzanResources