SweetAlert2 ASP.NET Gridview 删除行确认

SweetAlert2 ASP.NET Gridview Delete Row Confirm

删除gridview一行时我尝试使用sweetalert2

这是我的 js:

<script>
        var object = { status: false, ele: null };
        function ConfirmDelete(ev) {
            if (object.status) { return true; };
            Swal.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Yes, delete it!',
                preConfirm: function () {
                    return new Promise(function (resolve) {
                        setTimeout(function () {
                            resolve()
                        }, 2000)
                    })
                    object.status = true;
                    object.ele = ev;
                    object.ele.click();
                }
            }).then(function () {
            })
            return false;

        };
    </script>
<asp:ImageButton ImageUrl="~/dist/img/delete.png" runat="server" CommandName="Delete" OnClientClick="return ConfirmDelete();" ToolTip="Sil" Width="20px" Height="20px" />

设置这个更简单。您希望该函数为 return true 或 false。

并且引入 promise 和 hand stands 不会解决这个问题,因为像大多数 js 加载项一样,无论是 jQuery.UI 对话框,还是这种情况下的甜蜜警报,它们 运行 异步 -除非其他 js 例程正在调用该警报例程,否则引入 promise 不会对您有所帮助 - 而事实并非如此。

此外,我们“假设”您拥有的按钮在网格中 - 看起来确实如此,但您至少应该提供周围的标记。

不是世界末日。

所以,这应该有效:

你的按钮,变成这样:

<asp:ImageButton ImageUrl="~/dist/img/delete.png" runat="server"
    CommandName="Delete" 
    OnClientClick="return ConfirmDelete(this);"
    ToolTip="Sil" Width="20px" Height="20px" />

注意在上面我们将按钮传递给 js 例程时非常小心。

所以,js现在可以变成这样:

<script>
    var ConfirmDeleteOk = false
    function ConfirmDelete(btn) {

        if (ConfirmDeleteOk) {
            ConfirmDeleteOk = false
            return true
        }
        
        swal({
            title: "Are you sure?",
            text: "Are you sure that you want to delete this data?",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        })
            .then(willDelete => {
                if (willDelete) {
                    ConfirmDeleteOk = true;
                    btn.click();
                }
                else {
                    swal("Safe!", "Your imaginary file is safe!", "success");
                }
            });
        return false;
    }

</script>

注意例程的最后一行“return false”

我看不出有任何理由为 return 创建一些 js 对象,而我们关心的只是 return 真或假 - 所以为此使用一个简单的变量。

我解决了下面的问题代码。

这是按钮

<asp:ImageButton ImageUrl="~/dist/img/delete.png" runat="server" CommandName="Delete" OnClientClick="return conFunction(this);" ToolTip="Sil" Width="20px" Height="20px" />

这是 JS

<script type="text/javascript">
    var object = { status: false, ele: null };
    function conFunction(ev) {
        var evnt = ev;
        if (object.status) { return true; }
        Swal.fire({
            title: 'Silmek istediğinize emin misiniz?',
            text: "Onayladıktan sonra işlem geri alınamaz",
            icon: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Evet, Sil',
            cancelButtonText: 'İptal',
            closeOnConfirm: true
        }).then((result) => {
            if (result.isConfirmed) {
                object.status = true;
                object.ele = evnt;
                evnt.click();
            }
        })

        return object.status;
    };
</script>