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

多提交按钮PHP表单:如何获取点击的提交按钮ID(JavaScript)

解决方案

方案1:给每个提交按钮单独绑定点击事件

直接为每个提交按钮绑定click事件,这样点击时event.target就是对应的按钮,能直接拿到ID。需要先阻止按钮的默认提交行为,等BootBox确认后再手动完成提交(避免循环触发事件)。

示例代码

HTML部分:

<form id="pageFormMultiSubmit" method="POST">
  <!-- 表单输入内容 -->
  <button type="submit" id="btnSave">保存</button>
  <button type="submit" id="btnDelete">删除</button>
  <button type="submit" id="btnPublish">发布</button>
  <button type="submit" id="btnDraft">存草稿</button>
</form>

JavaScript部分:

// 获取表单下所有提交按钮
const submitBtns = document.querySelectorAll('#pageFormMultiSubmit [type="submit"]');

submitBtns.forEach(btn => {
  btn.addEventListener('click', function(e) {
    // 先阻止默认提交
    e.preventDefault();
    const btnId = this.id;
    
    // 弹出BootBox确认框
    bootbox.confirm({
      message: `确认执行${btnId === 'btnSave' ? '保存' : btnId === 'btnDelete' ? '删除' : btnId === 'btnPublish' ? '发布' : '存草稿'}操作?`,
      buttons: {
        confirm: { label: '确认', className: 'btn-success' },
        cancel: { label: '取消', className: 'btn-danger' }
      },
      callback: function(result) {
        if (result) {
          // 确认后触发按钮原生提交(绕过绑定的click事件)
          btn.dispatchEvent(new Event('submit'));
          // 也可以直接提交表单:document.getElementById('pageFormMultiSubmit').submit();
          // 注意:用form.submit()不会传递按钮的name/value,后台需要区分按钮的话,建议用前者或加隐藏字段
        }
      }
    });
  });
});

方案2:利用表单submit事件的event.submitter属性

HTML5标准里,表单的submit事件对象包含submitter属性,直接指向触发提交的按钮元素,不需要单独给按钮绑事件。

示例代码

const form = document.getElementById('pageFormMultiSubmit');

form.addEventListener('submit', function(e) {
  e.preventDefault();
  const submitBtn = e.submitter;
  if (!submitBtn) return; // 排除无按钮触发的提交场景
  
  const btnId = submitBtn.id;
  
  bootbox.confirm({
    message: `确认执行${btnId === 'btnSave' ? '保存' : btnId === 'btnDelete' ? '删除' : btnId === 'btnPublish' ? '发布' : '存草稿'}操作?`,
    buttons: {
      confirm: { label: '确认', className: 'btn-success' },
      cancel: { label: '取消', className: 'btn-danger' }
    },
    callback: function(result) {
      if (result) {
        // 移除当前submit事件监听,避免循环触发
        this.removeEventListener('submit', arguments.callee);
        // 提交表单
        this.submit();
      }
    }.bind(this) // 绑定this为当前表单元素
  });
});

注意事项

  • 用form.submit()提交时,不会触发表单的submit事件,也不会把按钮的name/value传给后台。如果后台需要区分是哪个按钮触发的提交,优先用方案1,或者手动加隐藏字段记录按钮ID。
  • event.submitter不兼容IE浏览器,需要兼容旧版浏览器的话选方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:14:57