0

当我单击删除按钮时,我有以下要调用的函数(我有一个用户列表及其相关 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;
}

然后我决定覆盖确认函数并将其转换为如下的 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 时触发删除相同)来删除我的项目。谁能让我知道我在这里想念什么?谢谢。

4

2 回答 2

1

您可能必须重新编写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);
                    }
                }
            }
        });
    };
});

更好的是,您可以将回调函数传递给的确认函数......

于 2013-05-01T06:57:32.113 回答
0

我对此采取的方法是让.confirm函数返回 a 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');
});
于 2013-05-01T07:30:20.990 回答