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

如何为表格中动态创建的所有表单统一处理提交事件

回答

嘿,这个问题我之前也碰到过!核心原因是你在提交回调里用了frm.serialize(),而frm是你一开始获取的所有表单的集合——jQuery里当你对一个集合调用这类方法时,它只会作用于集合里的最后一个元素,所以不管点哪个提交按钮,都会用最后一个表单的数据。

直接改一行代码就搞定了:把回调里的frm换成$(this)。因为当某个表单触发submit事件时,this就指向那个被提交的具体表单,这样序列化的就是当前表单的数据,而不是整个集合的最后一个。

修改后的JS代码:

<script type="text/javascript">
  $('.manualImportSubmit').submit(function (e) {
    e.preventDefault();
    // 用$(this)指代当前正在提交的表单
    const currentForm = $(this);
    console.log(currentForm.serialize());
    // 对应的AJAX部分也要改成用currentForm
    $.ajax({
      type: currentForm.attr('method'),
      url: currentForm.attr('action'),
      data: currentForm.serialize(),
      success: function (data) {
        console.log('Submission was successful.');
      },
      error: function (data) {
        console.log('An error occurred.');
      }
    });
  });
</script>

另外,如果你的表单是之后动态添加到页面的(比如通过AJAX加载或者JS动态生成),直接用.submit()绑定事件可能会失效,这时候推荐用事件委托的方式,把事件绑定到一个已经存在的父元素(比如表格本身),这样新添加的表单也能触发事件:

<script type="text/javascript">
  // 假设你的表格有id="data-table",没有的话用document也可以
  $('#data-table').on('submit', '.manualImportSubmit', function (e) {
    e.preventDefault();
    const currentForm = $(this);
    console.log(currentForm.serialize());
    // AJAX部分同样修改
    $.ajax({
      type: currentForm.attr('method'),
      url: currentForm.attr('action'),
      data: currentForm.serialize(),
      success: function (data) {
        console.log('Submission was successful.');
      },
      error: function (data) {
        console.log('An error occurred.');
      }
    });
  });
</script>

这样不管表单是一开始就有的还是后来动态生成的,都能正确处理每个表单的提交,而且完全不需要为每个表单单独写处理函数,完美符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:18