我有一个基本的网页,MVC与jQuery和Bootbox,当用户点击删除链接我想显示一个确认框,是 - 或 - 否,然后preventDefault或根据答案返回false。非常简单的东西,但我似乎无法从BootBox捕获结果值。
HTML代码段
@Html.ActionLink("Delete", "Delete", new { id = item.UserDetailId },
new { @class = "delete_click", onclick = "return ConfirmDelete('" + item.Email + "');" })
Javascript
var confirm_result = false;
function ConfirmDelete(message) {
bootbox.confirm({
message: "<h3>Delete this account:</h3> <span class=bold> " + message + " </span>",
buttons: {
cancel: {
label: 'No'
},
confirm: {
label: 'Yes'
}
},
callback: function(result) {
console.log('This was logged in the callback: ' + result);
confirm_result = result;
}
});
// ?? how do I control the true/false return value here ??
return false;
};
一切正常,没有错误,对话框显示,回调被调用等;但是当用户单击“确定”时,confirm_result不会设置为true?
我是否需要将回调拆分为单独的函数?
更新:回调是异步的! ConfirmDelete函数总是在回调执行之前退出!那是我的问题,正在修复......
我忘记了它是如何工作的,OnClick函数调用显示然后立即退出的BootBox对话框。我从ConfirmDelete函数返回'false'以防止链接起作用。要在用户单击“确定”时提交删除,我需要从回调内部重定向。 “更好”的代码看起来像这样。
function ConfirmDelete(name, id) {
bootbox.confirm({
message: "Delete this user: " + name + "?",
buttons: {
confirm: {
label: 'Yes'
},
cancel: {
label: 'No'
}
},
callback: function (result) {
if (result)
{
var url = "Delete/" + id;
console.log("redirect to url:" + url);
window.location.href = url;
}
else
{ console.log("cancel delete"); }
}
});
return false;
};
注意window.location.href调用,这是关键。管理这样的网页,管理后退按钮等还有其他问题;但这是按预期工作的。
AJAX是你的朋友,学习使用AJAX!