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

Flask表单确认弹窗问题:点击取消仍提交表单如何解决?

问题原因与解决方案

这不是Flask的特性,完全是前端JavaScript处理表单默认提交行为的问题。你的按钮默认是submit类型,点击时会触发浏览器自带的表单提交动作,这个动作不受你JS函数里的逻辑影响——哪怕你取消了确认,默认提交还是会执行,导致/delete接口被调用。

修复方案

方案一:通过返回值阻止默认提交

修改HTML和JS代码,利用return阻止默认行为,同时使用传入的表单对象:

HTML代码:

<form action="/delete" method="post">
    <button id="deleteForm" class="btn btn-danger" onclick="return deleteConfirm(this.form)">Delete</button>
</form>

JS代码:

function deleteConfirm(form) {
    let text = "Are you sure?\nOk=Delete all data.";
    if (confirm(text)) {
        form.submit();
        return true;
    } else {
        alert("Cancelled.");
        return false;
    }
}

方案二:将按钮改为普通按钮

把按钮类型设为button,避免默认提交行为,手动控制表单提交:

HTML代码:

<form action="/delete" method="post" id="deleteForm">
    <button type="button" class="btn btn-danger" onclick="deleteConfirm()">Delete</button>
</form>

JS代码:

function deleteConfirm() {
    let text = "Are you sure?\nOk=Delete all data.";
    if (confirm(text)) {
        document.getElementById("deleteForm").submit();
    } else {
        alert("Cancelled.");
    }
}

方案三:使用事件监听(推荐)

分离HTML与JS逻辑,通过表单的submit事件监听来控制:

HTML代码:

<form action="/delete" method="post" id="deleteForm">
    <button class="btn btn-danger">Delete</button>
</form>

JS代码:

document.getElementById('deleteForm').addEventListener('submit', function(e) {
    let text = "Are you sure?\nOk=Delete all data.";
    if (!confirm(text)) {
        e.preventDefault();
        alert("Cancelled.");
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:35:31