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

如何在Bootstrap主题中按需求实现SweetAlert2表单提交交互

在Bootstrap主题中整合SweetAlert2实现表单提交流程

需求:

  • 点击提交按钮时先校验表单有效性
  • 校验通过后,显示加载状态的SweetAlert直至数据存入数据库
  • 数据成功入库显示成功提示,异常则显示错误提示

以下是我目前的代码:

<!DOCTYPE html>

<link href="https://fonts.googleapis.com/css?family=Nunito:400,600,700" rel="stylesheet">
<link href="src/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="layouts/horizontal-dark-menu/css/light/plugins.css" rel="stylesheet" type="text/css" />
<link href="layouts/horizontal-dark-menu/css/dark/plugins.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="src/assets/css/light/elements/alert.css">
<link rel="stylesheet" type="text/css" href="src/assets/css/dark/elements/alert.css">   
<link href="src/assets/css/light/scrollspyNav.css" rel="stylesheet" type="text/css" />
<link href="src/assets/css/dark/scrollspyNav.css" rel="stylesheet" type="text/css" /> 
<link rel="stylesheet" href="src/plugins/src/sweetalerts2/sweetalerts2.css">
<link href="src/plugins/css/light/sweetalerts2/custom-sweetalert.css" rel="stylesheet" type="text/css" />
<link href="src/assets/css/dark/scrollspyNav.css" rel="stylesheet" type="text/css" />
<link href="src/plugins/css/dark/sweetalerts2/custom-sweetalert.css" rel="stylesheet" type="text/css" />
<script src="src/assets/jquery.js"></script>
<script src="src/assets/jquery.min.js"></script>
<script>
$("#email").inputmask(
{
mask:"*{1,20}[.*{1,20}][.*{1,20}][.*{1,20}]@*{1,20}[.*{2,6}][.*{1,2}]",
greedy:!1,onBeforePaste:function(m,a){return(m=m.toLowerCase()).replace("mailto:","")},
definitions:{"*":
{
validator:"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
cardinality:1,
casing:"lower"
}
}
}
);
</script>

<form id="supplierForm">
    <div class="mb-3">
        <label class="form-label">供应商名称</label>
        <input type="text" class="form-control" required>
        <div class="valid-feedback">格式正确!</div>
        <div class="invalid-feedback">无效的供应商名称。</div>
    </div>
    <div class="mb-3">
        <label class="form-label">供应商地址</label>
        <textarea class="form-control" required></textarea>
    </div>
    <div class="mb-3">
        <label class="form-label">供应商邮箱</label>
        <input type="email" class="form-control" id="email" required>
        <div class="valid-feedback">格式正确!</div>
    </div>
    <div class="mb-3">
        <label class="form-label">供应商电话</label>
        <input type="text" class="form-control" id="ph-number2" required>
        <div class="valid-feedback">格式正确!</div>
    </div>
    <button class="btn btn-primary mixin" id="btnSubmit">提交表单</button>
</form>

<script src="src/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="src/plugins/src/perfect-scrollbar/perfect-scrollbar.min.js"></script>
<script src="src/plugins/src/mousetrap/mousetrap.min.js"></script>
<script src="src/plugins/src/waves/waves.min.js"></script>
<script src="layouts/horizontal-dark-menu/app.js"></script>
<script src="src/plugins/src/highlight/highlight.pack.js"></script>
<script src="src/assets/js/scrollspyNav.js"></script>
<script src="src/plugins/src/input-mask/jquery.inputmask.bundle.min.js"></script>
<script src="src/plugins/src/input-mask/input-mask.js"></script>
<script src="src/assets/js/forms/bootstrap_validation/bs_validation_script.js"></script>
<script src="src/plugins/src/sweetalerts2/sweetalerts2.min.js"></script>
<script src="src/plugins/src/sweetalerts2/custom-sweetalert.js"></script>

<script>
// 电话格式处理
$("#ph-number2").inputmask({mask:" (999) 9999-9999"});

document.querySelector('.widget-content .mixin').addEventListener('click', function() {
const Toast = Swal.mixin({
toast: true,
position: 'top-end',
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
})

    Toast.fire({
        icon: 'success',
        title: '保存成功'
    })
})
</script>

实现完整流程的修改方案

1. 完善表单校验触发逻辑

确保表单通过Bootstrap原生校验规则生效,给表单添加id="supplierForm"并保留字段的required属性,触发校验时自动显示反馈提示。

2. 重写提交事件,实现完整流程

替换原有的点击事件代码,实现校验→加载→提交→反馈的完整流程:

document.querySelector('#btnSubmit').addEventListener('click', function(e) {
    e.preventDefault(); // 阻止默认表单提交行为
    const form = document.getElementById('supplierForm');
    
    // 步骤1:触发Bootstrap表单校验
    if (!form.checkValidity()) {
        form.classList.add('was-validated');
        return;
    }
    
    // 步骤2:显示加载状态弹窗
    Swal.fire({
        title: '提交中...',
        text: '请稍候',
        allowOutsideClick: false,
        didOpen: () => {
            Swal.showLoading(); // 显示加载动画
        }
    });
    
    // 步骤3:收集表单数据(根据实际字段调整)
    const formData = new FormData(form);
    
    // 步骤4:发起AJAX请求提交数据到后端
    $.ajax({
        url: '你的数据入库接口地址', // 替换为实际后端接口
        method: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: function(response) {
            // 步骤5:关闭加载弹窗,显示成功提示
            Swal.close();
            Swal.fire({
                icon: 'success',
                title: '提交成功',
                text: '数据已成功存入数据库',
                timer: 3000,
                showConfirmButton: false
            });
            // 可选:重置表单
            form.reset();
            form.classList.remove('was-validated');
        },
        error: function(xhr, status, error) {
            // 步骤6:关闭加载弹窗,显示错误提示
            Swal.close();
            Swal.fire({
                icon: 'error',
                title: '提交失败',
                text: '数据入库出现异常,请稍后重试',
                confirmButtonText: '确定'
            });
        }
    });
});

3. 代码整合说明

将上述JavaScript代码替换原有的点击事件代码,确保jQuery和SweetAlert2的脚本已在页面中正确加载,即可实现需求中的完整流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:00:08