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

全局表单提交加加载遮罩时如何兼容部分表单的自定义确认需求

冲突根因

你之前的逻辑冲突是因为内联onsubmit的返回值不会阻止额外绑定的submit事件监听器执行,你在全局监听器里固定拦截默认行为后直接提交,完全忽略了确认操作的返回结果。

解决方案

仅需两步修改即可完全匹配你的所有需求:

1. 调整HTML表单写法

去掉内联onsubmit,改用自定义data-confirm属性存放确认提示文本,不需要确认的表单无需添加该属性:

<form method="post" action="<?=base_url('clients/' . $meeting->cid);?>" data-confirm="Are you sure?">
  <input type="hidden" name="delmeeting" value="<?=$meeting->id;?>">
  <input type="submit" value="Delete" class="button">
</form>

2. 修改全局JS逻辑

document.addEventListener('DOMContentLoaded', () => {
  const forms = document.querySelectorAll('form');
  forms.forEach(form => {
    form.addEventListener('submit', e => {
      e.preventDefault();
      // 校验是否需要确认
      const confirmTip = form.dataset.confirm;
      if (confirmTip && !confirm(confirmTip)) return;
      // 确认通过/无需确认,显示加载屏后提交
      document.getElementById('loading').classList.remove('hidden');
      form.submit();
    });
  });
});

这里把toggle替换为remove更稳妥,避免重复点击触发加载屏隐藏的问题。

方案匹配度验证

  • 所有表单提交时都必须显示加载div:只要通过校验进入提交流程,都会触发加载屏显示
  • 支持配置部分表单弹出确认窗:仅给需要确认的表单添加data-confirm属性即可,无属性的表单直接走提交流程
  • 代码保持精简:仅新增2行校验逻辑,无额外依赖
  • 确认弹窗支持自定义提示文本:data-confirm的属性值就是弹窗提示内容,可任意自定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:03