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