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

如何实现点击非默认提交按钮提交表单,调用submit方法报错如何解决?

问题解决方法

问题根源

  1. 你代码中获取的form.onSubmit属性默认值为null,你没有手动给它赋值过处理函数,调用formSubmitFunc()时自然会抛出「o is not a function」的类型错误。
  2. 你给表单全局绑定了submit事件并统一执行preventDefault()拦截所有提交,如果你用jQuery的submit()方法触发提交,会再次进入事件回调被拦截,导致提交失效;原生form.submit()方法本身不会触发submit事件监听,不会被拦截,如果你之前测试时用的是jQuery封装的提交方法就会出现提交无响应的问题。

修复方案

推荐用状态标记法控制提交拦截逻辑,不需要拆分提交方法:

const form = document.querySelector('.form_submit');
// 新增确认状态标记,默认未确认
let isFormConfirmed = false;

// 表单提交拦截逻辑
form.addEventListener('submit', function(event) {
  // 仅未确认状态下拦截提交
  if (!isFormConfirmed) {
    event.preventDefault();
    confirmDlg.show();
  }
});

// 确认按钮点击逻辑
confirmDlgConfirmBtn.on('click', function() {
  console.log('yes');
  confirmDlg.hide();
  // 标记为已确认
  isFormConfirmed = true;
  // 触发表单提交,此时不会被拦截
  form.submit();
  // 如果使用jQuery触发提交,写法为 $(form).submit()
});

// 取消按钮点击逻辑
confirmDlgCancelBtn.on('click', function() {
  console.log('no');
  confirmDlg.hide();
});

// Save按钮默认会触发表单提交,不需要额外绑定弹框逻辑,如果有其他业务逻辑可以保留
saveButton.on('click', function() {
  // 注意:原逻辑此处设置disabled = false可能存在逻辑问题,正常点击保存后应该禁用按钮避免重复提交,提交完成后再恢复可用
  saveButton.disabled = false;
  console.log('save');
});

其他补充

如果你的表单是走AJAX异步提交而非原生页面跳转提交,不需要调用form.submit(),直接在确认按钮的点击回调中执行你的AJAX提交逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 01:15:02