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

两个HTML提交按钮总触发第一个提交 如何用纯HTML解决该问题

问题排查方向

你贴出的代码从语法上看是两个独立表单,理论上不会出现点第二个按钮提交第一个接口的问题,优先排查两类前端问题:

  • 用浏览器F12元素面板检查实际渲染的DOM结构,确认是否存在未闭合的<form>标签,导致浏览器把两个按钮识别为同一个表单的元素
  • 排查是否有全局JS拦截了submit事件强制提交第一个表单地址,可临时禁用所有JS测试按钮功能是否正常,排除JS干扰

纯HTML实现方案

方案1:保留多表单结构(当前写法的修复版)

给每个表单添加唯一name属性避免浏览器识别混淆,修改后代码如下:

<h3> Backtest ID: {{ backtestID }} </h3>
<div class="row">
    <div class="col-md-1" >
        <form method="post" name="save_backtest_form">
            <button type="submit" class="btn btn-success" 
                    formaction="{{ url_for('results.save_backtest', id=backtestID) }}">Save</button>
        </form>
    </div>
    <div class="col-md-1" >
        <form method="post" name="rerun_backtest_form">
            <button type="submit" class="btn btn-info" 
                    formaction="{{ url_for('results.rerun_backtest', id=backtestID) }}">Run</button>
        </form>
    </div>
</div>

方案2:单表单多按钮(对应你参考的同表单多提交按钮方案)

如果业务需要两个按钮归属同一个表单,直接用HTML5原生的formaction属性即可,浏览器会自动用点击按钮指定的地址提交表单,无需额外代码:

<h3> Backtest ID: {{ backtestID }} </h3>
<div class="row">
    <form method="post">
        <div class="col-md-1" >
            <button type="submit" class="btn btn-success" 
                    formaction="{{ url_for('results.save_backtest', id=backtestID) }}">Save</button>
        </div>
        <div class="col-md-1" >
            <button type="submit" class="btn btn-info" 
                    formaction="{{ url_for('results.rerun_backtest', id=backtestID) }}">Run</button>
        </div>
    </form>
</div>

如果需要兼容不支持HTML5的旧浏览器,可给两个按钮添加不同的name属性,后端根据接收到的参数名判断执行对应逻辑即可,同样是纯HTML实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:39:01