jQuery对话框确认删除不会触发删除

jQuery dialog confirm delete does not trigger the delete

本文关键字:删除 确认 jQuery 对话框      更新时间:2023-09-26

当我单击删除按钮时,我有以下函数要调用(我有一个用户列表,其相关id和基于其要删除的id的删除按钮),其工作良好:

function confirmDelete(name, deleteURL) {
    var description = "Delete " + name + "?";
    var check = confirm(description);
    if(check == true) {
        self.location = deleteURL;
    } else {
        window.location.deleteURL = deleteURL;
    }
    return false;
}

然后我决定重写confirm函数,并把它变成一个jquery对话框,如下所示:

$(function () {
    window.confirm = function (message) {
        $('#overrideAlert').text(message).dialog({
            resizable: false,
            height: 140,
            modal: true,
            buttons: {
                "Delete item": function () {
                    $(this).dialog("close");
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });
    };
});

当我点击删除链接,jQuery对话框弹出正确,但当我点击"删除项目",它实际上并不触发删除,它只是关闭对话框(因为它应该)。我在这里错过的可能是应该有方法(与JavaScript确认触发删除时ok被选中)删除我的项目。谁能让我知道我在这里错过了什么?谢谢。

您可能需要重写confirmDelete()才能使此工作。

也许像这样:

function confirmDelete(name, deleteURL) {
    var description = "Delete " + name + "?";
    confirm(description, doDelete, deleteURL);
}
function doDelete(check, deleteURL) {
    if(check == true) {
        self.location = deleteURL;
    } else {
        window.location.deleteURL = deleteURL;
    }
}

$(function () {
    window.confirm = function (message, callbackFunc, funcArg) {
        $('#overrideAlert').text(message).dialog({
            resizable: false,
            height: 140,
            modal: true,
            buttons: {
                "Delete item": function () {
                    $(this).dialog("close");
                    if ($.isFunction(callbackFunc)) {
                        callbackFunc(true, funcArg);
                    }
                },
                Cancel: function () {
                    $(this).dialog("close");
                    if ($.isFunction(callbackFunc)) {
                        callbackFunc(false, funcArg);
                    }
                }
            }
        });
    };
});

更好的是,你可以传递一个回调函数给你的new confirm函数…

我采取的方法是让.confirm函数返回promise

var confirm = function() {
    var def = $.Deferred();
    ...
        "Delete Item": function() {
            $(this).dialog('close');
            def.resolve();
        },
        "Cancel": function() {
            def.reject();
        }
    }
    return def;
}
confirm("prompt").done(function() {
     console.log('success');
}).fail(function() {
     console.log('cancel');
});