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

表单提交先执行动画再提交的循环问题求解

解决表单提交动画后循环阻止的问题

这问题我之前也踩过坑——你碰到的核心问题是:当你在动画完成后调用$('form').submit()时,这个方法会再次触发你绑定的submit事件处理器,于是又会执行e.preventDefault(),陷入无限循环,自然没法提交表单。

而且你想保留回车触发提交的需求完全可行,不需要切换到onClick事件,给你两个简单的解决方案:

方案一:用状态标记控制阻止逻辑

加一个开关变量,区分是第一次触发(需要执行动画)还是后续的提交流程(直接放行):

let isProcessingSubmit = false;
$('form').submit(function(e) {
  // 如果已经在提交流程中,直接跳过阻止逻辑
  if (isProcessingSubmit) return;
  
  e.preventDefault();
  isProcessingSubmit = true;
  
  $('.thing').fadeOut('slow', () => {
    // 此时标记为已处理,再次提交不会触发阻止
    $(this).submit();
  });
});

方案二:直接调用原生表单提交(更简洁)

jQuery的submit()方法会触发绑定的事件,但原生DOM元素的submit()方法会直接提交表单,不会触发事件处理器,完美避开循环:

$('form').submit(function(e) {
  e.preventDefault();
  // 保存原生表单元素的引用
  const nativeForm = this;
  
  $('.thing').fadeOut('slow', () => {
    // 调用原生submit,不会触发jQuery绑定的事件
    nativeForm.submit();
  });
});

这两种方案都能同时支持点击提交按钮和回车键提交的场景,因为回车触发表单提交本来就会触发submit事件,你的逻辑完全覆盖了这两种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:25