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

如何在SweetAlert中实现表单确认提交?

SweetAlert确认后表单无法提交的问题修复

问题描述

点击删除按钮触发SweetAlert确认弹窗,确认后表单未正常提交,控制台报错:Uncaught TypeError: form.submit is not a function

现有代码

JS弹窗代码

<script src="{{ asset('themes/js/sweetalert.min.js') }}"></script>
<script>
    $('.btn-danger').click(function(event) {
        event.preventDefault();
        var form = $(this).parents('#form-delete');
        swal({
            title: "Are you sure?",
            text: "You will not be able to recover this imaginary file!",
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "Yes, delete it!",
            closeOnConfirm: false
        }, function(isConfirm){
            if (isConfirm) form.submit();
        });
    });
</script>

表单代码

<form action="{{ route('admin.blogs.destroy', $blog->id) }}" method="post" id="form-delete">
    @csrf
    @method('DELETE')
    <div class="btn-group btn-group-sm">
        <a href="{{ route('admin.blogs.edit', $blog->id) }}" class="btn btn-primary">edit</a>
        <button type="submit" class="btn btn-danger">delete</button>
    </div>
</form>

问题原因

$(this).parents('#form-delete')获取的是jQuery包装后的表单对象,直接调用.submit()会触发表单的提交事件,但之前我们已经用event.preventDefault()阻止了按钮的默认提交行为,二者机制冲突导致报错。

修复方案

将确认回调里的form.submit()改为调用原生DOM元素的submit()方法,绕过jQuery事件绑定直接提交表单:

<script src="{{ asset('themes/js/sweetalert.min.js') }}"></script>
<script>
    $('.btn-danger').click(function(event) {
        event.preventDefault();
        var form = $(this).parents('#form-delete');
        swal({
            title: "Are you sure?",
            text: "You will not be able to recover this imaginary file!",
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "Yes, delete it!",
            closeOnConfirm: false
        }, function(isConfirm){
            if (isConfirm) form[0].submit(); // 改用原生DOM提交
        });
    });
</script>

也可以使用jQuery的trigger('submit')方法实现同样效果:

if (isConfirm) form.trigger('submit');

两种方式都能解决报错问题,推荐原生DOM提交的方式,逻辑更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:20:34