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

基于Ajax和JQuery的多步骤表单提交异常求助

问题原因分析

你的代码里,index()函数直接给#myForm绑定submit事件,但第一次AJAX提交后,#main-container里的表单是新生成的DOM元素,之前绑定的事件不会自动作用在新元素上。第二次提交时,新表单没有被绑定e.preventDefault(),触发了表单默认提交行为,导致页面刷新。

解决方案

改用事件委托的方式绑定提交事件,把事件绑定到不会被替换的父元素上,确保新生成的表单也能触发事件:

$(document).ready(function() {
  // 初始加载表单
  jQuery.ajax({
    type: "post",
    url: 'index.php'
  }).done(function(msg) {
    $('#main-container').html(msg);
  });

  // 事件委托绑定submit事件
  $('#main-container').on('submit', '#myForm', function(e) {
    e.preventDefault();
    var formData = $(this).serialize(); // 直接获取当前提交的表单数据,更准确
    console.log(formData);
    jQuery.ajax({
      type: "POST",
      url: 'index.php',
      data: formData
    }).done(function(msg2) {
      console.log(msg2)
      $('#main-container').html(msg2);
    });
  });
});
关键改动说明
  • 移除原index()函数,改用on()方法实现事件委托,父元素选择固定存在的#main-container(不会被AJAX替换)
  • 事件绑定目标为#myForm,无论表单是初始加载还是后续AJAX生成,只要在#main-container内就能触发事件
  • 用$(this)替代$('#main-container').find('form'),直接获取当前提交的表单,避免容器内多表单时出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:48:09