Javascript jQuery对话框确认删除不会触发删除
当我点击一个删除按钮(我得到了一个用户的相关id列表,并根据他们的id删除了按钮)时,我可以调用以下功能,该功能可以正常工作: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;
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。