Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery对话框确认删除不会触发删除_Javascript_Jquery_Jquery Ui - Fatal编程技术网

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

Javascript jQuery对话框确认删除不会触发删除,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,当我点击一个删除按钮(我得到了一个用户的相关id列表,并根据他们的id删除了按钮)时,我可以调用以下功能,该功能可以正常工作: function confirmDelete(name, deleteURL) { var description = "Delete " + name + "?"; var check = confirm(description); if(check == true) { self.location = deleteURL;

当我点击一个删除按钮(我得到了一个用户的相关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对话框会正确弹出,但当我单击“删除项”时,它实际上不会触发删除,它只会关闭对话框(它应该关闭)。我在这里缺少的可能是应该有一种方法(与选择ok时触发删除的JavaScript确认相同)来删除我的项目。
有人能告诉我我错过了什么吗?谢谢。

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

更好的是,您可以将回调函数传递给新的confirm函数…

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

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');
});

问题是您需要首先触发confirmDelete来获取转换到jquery对话框的第二部分@这很简单。第二个脚本用于覆盖任何确认jquery对话框。首先需要调用confirmDelete,这就是我想要的mean@jahroy是的,我有数百页使用警报,所以我想我应该重新定义,而不是一个大的改变。这是有道理的。请原谅我误读了这个问题。我现在正在读。乍一看,您的问题似乎是“如何从jQuery对话框中获取返回值”。当我在谷歌上搜索时,我找到了……那太棒了。对不起,我一开始误读了这个问题。。。此外,我开始编辑问题,以便将回调函数传递给新的确认函数,但由于您已经接受了答案,因此我将保持原样……您可以进行更改吗?;)当然我会把我认为有效的东西贴出来,让你看看是否有效;-)刚刚意识到传递deleteURL也有问题!有什么建议吗?!我想您可以将其添加为另一个参数。。。我不确定这个策略有多可疑。查看confirm只需要一个参数,因此出于您的目的添加两个参数可能是无害的。在这种情况下,您可以在回调函数之前或之后添加deleteUrl。