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

为何显示模态框后jQuery的.submit()函数失效且陷入无限循环?

jQuery表单提交:无限循环与无法提交问题解决

问题根源分析

原始代码的无限循环问题

你绑定的submit事件处理器里,调用$("#myform").submit()会再次触发同一个submit事件,于是又执行e.preventDefault()阻止提交,接着进入setTimeout,之后又调用submit,无限循环往复,永远到不了真正的表单提交环节。

修改后无法提交的问题

你修改后的代码中,return false;写在了$("#myform").submit();之前——函数执行到return false就直接终止了,后面的提交代码根本不会被执行。就算把submit代码移到return前面,还是会回到无限循环的老问题。

正确解决方案

方案一:调用原生DOM的submit方法(推荐)

直接使用原生表单元素的submit方法,它不会触发jQuery绑定的submit事件监听,能直接完成表单提交:

$('#myform').on('submit', function(e) {
  e.preventDefault();
  const formElement = this; // 保存当前表单的原生DOM元素
  $('#myModal').modal('show');
  
  setTimeout(function() {
    $('#myModal').modal('hide');
    formElement.submit(); // 调用原生submit,绕过jQuery事件监听,直接提交
  }, 5000);
});

方案二:添加状态标记避免重复触发

通过一个布尔标记控制事件处理器的执行,防止循环触发:

let isProcessingSubmit = false;

$('#myform').on('submit', function(e) {
  // 如果正在处理提交流程,直接跳过
  if (isProcessingSubmit) return;
  
  e.preventDefault();
  isProcessingSubmit = true;
  $('#myModal').modal('show');
  
  setTimeout(function() {
    $('#myModal').modal('hide');
    $("#myform").submit(); // 此时标记为true,事件处理器会直接跳过,执行原生提交
  }, 5000);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:24:11