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

时间:2013-05-01 06:33:30

标签: javascript jquery jquery-ui

当我点击删除按钮时,我有以下功能被调用(我有一个用户列表,其相关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时触发删除)删除我的项目。 任何人都可以让我知道我在这里失踪了什么?感谢。

2 个答案:

答案 0 :(得分: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);
                    }
                }
            }
        });
    };
});

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

答案 1 :(得分:0)

我采取的方法是让.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');
});
相关问题