Bootbox对话框在循环内不会打开

时间:2017-07-26 15:31:19

标签: javascript twitter-bootstrap bootbox

这是我的目标:

  1. 将打开“自定义启动箱”对话框以指定值。用户指定一个值,单击“保存”,并通过Ajax调用将值传递给Web应用程序。

  2. Web应用程序验证该值并发回"成功"消息,如果验证通过并且数据库已更新或发回"失败"有验证失败原因的消息。

  3. 如果"成功"收到消息对话框关闭,否则再次打开并在用户输入下方显示验证消息。用户可以更改输入并再次单击“保存”,或按“取消”关闭对话框。

  4. MCVE(注意 while(bContinue == true)被注释掉,表明它没有循环工作,并且在任何地方都没有验证消息,但它将是Message变量的一部分(在Ajax调用后,该变量将在Save回调函数中更新)):

    
    
    $(document).on("click", ".alert", function(e) {
    var Message = "<label class='control-label col-sm-1' style='width:30px;' for='assignmentname'>"+"Assignment "+"</label>" 
                    + "<input type='text' id='assignmentname' class='form-control' style='float: left; max-width:800px;' value='Initial value'>"
    
                var bContinue = true;
    
                //while(bContinue == true)
                {
                    bootbox.dialog({
                        size: "large",
                        message: Message,
                        title: "Edit Assignment",
                        buttons: {
                            save: 
                            {
                                label: "Save",
                                className: "btn btn-success",
                                callback: function() {
                                    // perform Ajax call to the web application
                                    // and set bContinue to true or false depending on 
                                    // return value
                                    bContinue = true;
                                }
                            },
                            cancel: 
                            {
                                label: "Cancel",
                                className: "btn btn-default",
                                callback: function() {
                                    // exit out of the loop
                                    bContinue = false;
                                }
                            }
                        }
                    });        
    
                }
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
        <script src="https://github.com/makeusabrew/bootbox/releases/download/v4.4.0/bootbox.min.js"></script>
        <p><a class="alert" href=#>Click here</a></p>
    &#13;
    &#13;
    &#13;

    问题是 - 只要而(bContinue == true)未注释,对话框就永远不会打开。

    预期的MCVE行为:对话框打开,如果单击“保存”,则会关闭并重新打开。如果单击取消 - 对话框将关闭。

1 个答案:

答案 0 :(得分:1)

问题不在Bootbox中,问题出在while循环中,在没有等待Bootbox加载的情况下保持循环非常快,并且它使整个浏览器挂起:)

因此您需要更改逻辑,可以将Bootbox对话框放在一个函数中,并在保存时再次调用该函数。
或者可能正在使用承诺:How to use confirm alert and return an AJAX promise?