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

JavaScript动态创建#testform表单后jQuery Ajax提交失效解决方法

问题核心原因

你遇到的绑定失效是jQuery原生事件绑定的时机不匹配导致的:

  • 你写的$("#testform").submit(...)绑定代码,会在页面初始加载、DOM结构就绪的瞬间就执行——这时候需要点击按钮才会生成的动态表单根本还不存在于页面中,jQuery通过选择器找不到对应的DOM元素,自然就没法给它绑定submit事件逻辑。
  • 你之前测试静态预置表单方面能正常生效,是因为静态表单在页面初始加载时就已经存在于DOM中,绑定代码执行时能准确选中元素,自然可以正常绑定事件。
可落地的修复方案

方案1:采用事件委托绑定(推荐方案)

jQuery的事件委托机制可以利用DOM事件冒泡的特性,把事件绑定在页面加载时就已经固定存在的父级容器上,后续动态插入到容器内的匹配元素触发事件时,会被统一捕获执行回调,完全适配动态生成元素的场景。
把原来的submit绑定代码替换为如下写法即可:

// 绑定对象选择页面加载时就存在的父级容器.add_new,指定触发事件的子元素为#testform
$(".add_new").on("submit", "#testform", function(e) {
  e.preventDefault();
  // 直接用this指向当前触发submit的表单元素,无需重复硬选#testform
  const formData = new FormData(this);
  $.ajax({
    url: 'config.php',
    type: 'POST',
    data: formData,
    contentType: false,
    processData: false,
    success: function() {
      setTimeout(() => {
        // 精准匹配当前表单内的提交按钮,避免多表单场景下的选择偏差
        $(this).find(".addToDatabase").text("Successfully.");
      }.bind(this), 1000);
    }
  })
})

这种方案无需修改你原来的addDiv生成逻辑,一次绑定即可覆盖后续所有动态插入的表单元素,也不会出现重复绑定的问题。

方案2:在表单生成完成后再执行绑定

如果你坚持用直接绑定元素的写法,就需要把绑定逻辑移动到表单插入DOM之后执行,避免绑定时代码找不到目标元素:

function addDiv() {
  var panel = document.querySelector(".add_new");
  var div = document.createElement("div");
  div.innerHTML = '<br> <form id="testform" method="POST">  <div class="row" style="padding-left:10rem;">  <div class="col-md-4"> <input type="text" class="form-control" value="" placeholder="Başlık" name="yeniBaslik" required></div> <div class="col-md-4"> <input type="text" placeholder="Açıklama" name="yeniAciklama" class="form-control" value="" required> </div>   <div class="col-md-2 text-left">  <button type="submit" class="btn btn-success btn-animated btn-wide addToDatabase">Add to the Database</button>  </div>  </row> </form> <br>';
  panel.appendChild(div);

  // 表单成功插入DOM后,再执行submit事件绑定
  $("#testform").submit(function(e) {
    e.preventDefault();
    var formData = new FormData($("#testform").get(0));
    $.ajax({
      url: 'config.php',
      type: 'POST',
      data: formData,
      contentType: false,
      processData: false,
      success: function() {
        setTimeout(() => {
          $(".addToDatabase").html("Successfully.");
        }, 1000);
      }
    })
  })
}

⚠️ 注意这种写法的局限性:如果多次点击创建按钮生成多个同id的表单,会出现id重复、事件重复绑定的问题,维护性弱于事件委托方案。

小优化提醒

你当前生成表单的代码里,文本输入框写了两个重复的name属性(第二个input同时存在name="yeniAciklama"和空值name=""),虽然浏览器会自动忽略后面的空属性,但建议删除冗余代码,避免后续取值出现异常。


内容的提问来源于stack exchange,提问作者Berkay O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:24:01