我有行要删除,停用或标记为已读。现在,对于删除和停用,我会显示一个带有bootbox模式窗口的警告,而'mark as read'不需要警告。有三个按钮使用类名mass
:
$('.mass').click(function(e){
e.preventDefault();
var action = $(this).attr("data-action");
// see action and warn as necessary.
var goon = false; // decided to use goon to see if execution should continue or not, after my attempts without it failed
if (action == 'delete') {
//warn
bootbox.confirm('Sure Delete?' function(choice) {
goon = choice; //will be false or true
});
} else if (action == 'deactivate') {
bootbox.confirm('Deactivate?', function(choice) {
goon = choice;
});
} else { // we don't need warning
goon = true;
}
alert(goon); // to see
if (goon == false) {
return false;
}
//continue to server processing her
});
现在问题是alert(goon)
在点击cancel
或ok
之前显示模态窗口之前/之后被触发。它总是false
。整个if
块似乎没有任何效果。单击“取消”或“确定”后,它将不再运行,因为已经完成了该过程。
我想要的是什么?
答案 0 :(得分:1)
您的逻辑存在缺陷,因为您没有对引导框中返回的值执行任何操作。相反,您立即检查goon
(它将始终处于默认状态false
)并继续。
要解决此问题,您可以将逻辑提取到仅在与bootbox交互时调用的函数。试试这个:
$('.mass').click(function(e){
e.preventDefault();
var action = $(this).attr("data-action");
if (action == 'delete') {
bootbox.confirm('Sure Delete?' function(choice) {
choice && performAction(action);
});
} else if (action == 'deactivate') {
bootbox.confirm('Deactivate?', function(choice) {
choice && performAction(action);
});
} else {
performAction(action);
}
});
function performAction(action) {
// continue to server processing her
}
答案 1 :(得分:0)
从未使用过bootbox,但是来自他们的文档: http://bootboxjs.com/documentation.html
bootbox.alert("Your message here…", function(){ /* your callback code */ })
javascript是异步的,你的代码没有"等待"在它被执行之前。
我想你想要做的是将IF移动到回调块。 这样,它将在警报关闭时进行评估。