IF块执行前IF条件运行后的语句

时间:2016-10-19 10:33:06

标签: jquery

我有行要删除,停用或标记为已读。现在,对于删除和停用,我会显示一个带有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)在点击cancelok之前显示模态窗口之前/之后被触发。它总是false。整个if块似乎没有任何效果。单击“取消”或“确定”后,它将不再运行,因为已经完成了该过程。

我想要的是什么?

2 个答案:

答案 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移动到回调块。 这样,它将在警报关闭时进行评估。