首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery对话框确认删除不会触发删除

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

Stack Overflow用户
提问于 2013-05-01 14:33:30
回答 2查看 566关注 0票数 0

当我点击一个delete按钮时,我会调用下面的函数(我已经得到了一个用户列表,其中包含了他们的相关id,以及基于他们的id要删除的delete按钮),它工作得很好:

代码语言:javascript
复制
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对话框:

代码语言:javascript
复制
$(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");
                }
            }
        });
    };
});

当我点击delete链接时,jQuery对话框正确地弹出,但当我点击'delete item‘时,它实际上并没有触发删除,它只是关闭了对话框(它应该关闭)。我在这里遗漏的可能是应该有方法(与选择ok时触发删除的JavaScript确认相同)来删除我的项目。有没有人能告诉我这里遗漏了什么?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-01 14:57:32

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

可能是这样的:

代码语言:javascript
复制
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);
                    }
                }
            }
        });
    };
});

更好的是,你可以将一个回调函数传递给你的新确认函数...

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 15:30:21

我采用的方法是让.confirm函数返回一个promise。

代码语言:javascript
复制
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');
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16313780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档