【问题标题】:Cannot prevent sweet alert from closing无法阻止甜蜜警报关闭
【发布时间】:2019-09-08 14:01:21
【问题描述】:

我正在尝试在关闭 SweetAlert 之前验证 email 字段,但由于某种原因,SweetAlert 在捕获错误后正在关闭:

Swal.fire({
    title: title,
    html: template,
    preConfirm: function (email) {
        email = '';
        return new Promise(function (resolve, reject) {
            setTimeout(function () {
                if (email === '') {
                    alert("err");
                    reject('err')
                } else {
                    resolve()
                }
            }, 1000)
        }).catch(err => alert("error catched"))
    },
});

如何防止SweetAlert 模态在捕获错误时关闭?

谢谢

【问题讨论】:

  • 也许尝试删除reject之前的alert("err");,因为它会发出双重警报?
  • @pistou 同样的问题,sweetalert 正在关闭,错误仍然出现
  • 对我来说似乎很奇怪你要返回一个 Promise,但是你返回它时附加了一个 .catch。尝试只返回承诺?
  • @AndrewKoster 我兑现承诺,也许你的意思是别的?我的代码是:return new Promise(function (resolve, reject) {
  • 我重新阅读了Promise 的文档,发现您的那部分代码没有任何问题。请参阅我的答案以获取实际解决方案。

标签: javascript jquery sweetalert2


【解决方案1】:

这是一个功能齐全的示例(用于解决您的特定问题):

<html>
    <body>
        <div class="showDialogButton">Show dialog</div>

        <script src="https://code.jquery.com/jquery-3.4.1.js"
            integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
            crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
        <script type="text/javascript">

            $(() => {

                const title = "Hi"
                const template = `<b>hello</b> world`

                $(".showDialogButton").click(() => {
                    Swal.fire({
                        title: title,
                        html: template,
                        preConfirm: function (email) {
                            email = '';
                            return new Promise(function (resolve, reject) {
                                setTimeout(function () {
                                    if (email === '') {

                                        reject('Email is empty!')

                                    } else {

                                        resolve()
                                    }
                                }, 1000)
                            }).catch(err => {
                                alert(`error: ${err}`)
                                return false
                            })
                        },
                    });
                })
            })
        </script>
    </body>
</html>

默认行为是关闭对话框。为了覆盖它,你必须从你传递给.catch的函数中返回false

来自https://sweetalert2.github.io/#configuration

参数:preConfirm

默认值:空

描述:confirm前要执行的函数,可以是async(Promise-returning)或sync。返回(或解析)的值可以是:

  • false 防止弹出窗口关闭
  • 任何其他将该值作为result.valueSwal.fire() 传递
  • undefined 保持默认result.value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多