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

为何使用jQuery submit()方法时Firefox未发送表单请求(Chrome正常)

问题分析:Firefox中表单提交无请求,Chrome正常的原因

问题场景

点击页面中「Generate」按钮时,已通过日志确认jQuery事件处理程序执行,但Ubuntu系统的Firefox 113.0.2浏览器未发送表单请求,而Chrome中请求可正常发送。使用的jQuery版本为1.10.2。

页面HTML代码

<form id="sitemap_diff" action="/sitemaps/generate_sitemap_diff" method="get">
  <!-- more HTML elements here -->
  <button class="btn btn-success cls" id="cls" type="submit">Generate</button>
</form>

事件处理代码

$('.cls').click(function () {
  $('#sitemap_diff').submit();
  // more code
});

原因解析

  • 按钮本身是type="submit",点击时会触发浏览器原生的表单提交行为,同时代码又手动调用了$('#sitemap_diff').submit(),造成两次提交触发的冲突。
  • 不同浏览器对这种重复触发的处理逻辑存在差异:Chrome会合并或优先处理其中一次提交,而Firefox 113.0.2在该场景下,由于事件时序或冲突机制,导致表单提交被阻塞。
  • jQuery 1.10.2是较旧版本,对现代Firefox的事件处理兼容性存在不足,进一步放大了这个冲突问题。

解决方案

方案1:修改按钮类型

将按钮的type改为button,避免触发浏览器默认提交行为,只保留代码中的手动提交:

<button class="btn btn-success cls" id="cls" type="button">Generate</button>

方案2:阻止按钮默认行为

在click事件处理中添加阻止默认行为的代码,消除冲突:

$('.cls').click(function (e) {
  e.preventDefault(); // 阻止按钮原生的提交动作
  $('#sitemap_diff').submit();
  // more code
});

方案3:绑定表单submit事件

去掉按钮的click处理,直接绑定表单的submit事件,利用按钮原生的submit触发逻辑,更符合表单设计规范:

$('#sitemap_diff').submit(function() {
  // 原来的more code逻辑放到这里
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:11:04