【问题标题】:prevent bootstrap modal window from closing on form submission防止引导模式窗口在提交表单时关闭
【发布时间】:2013-09-24 11:40:59
【问题描述】:

您好,我是第一次使用 Bootstrap,但在单击提交按钮时,我的模态表单无法保持打开状态。 我已经搜索过,但所有相关问题都处理略有不同的问题(下面的示例)。

Disallow twitter bootstrap modal window from closing

【问题讨论】:

  • 您是通过 ajax 提交表单还是只是普通的提交表单?
  • @Apostolov,感谢您的快速回复!我没有使用ajax。 Ajax 不回发页面,因为我确实想在提交时回发,所以我认为我不应该。
  • @apostolov 我有同样的问题,我正在使用 Ajax 我该怎么办?

标签: javascript css twitter-bootstrap modal-dialog


【解决方案1】:

仅使用以下代码:-

$(document).ready(function () {
    $("#myModal").modal('show');
});

并在更新面板中编写您的 html 代码,然后从按钮中删除 data-dismiss="modal"。希望它对你有用。

【讨论】:

  • 如果您可以在代码中添加一些解释,那就太好了。如果只写指令,学习效果会大打折扣。
  • 这就是我想说的: 解释: -
【解决方案2】:

我遇到了类似的问题,我使用模态作为表单,所以我最初无法设置data-backdrop="static" data-keyboard="false",因为我希望用户能够关闭它,只要他没有提交表单。一旦他提交了表单,我想阻止他关闭表单模式。这是我可以绕过的方法。

$('#modalForm').on('submit', function() {
  $(#modal).on('hide.bs.modal', function ( e ) {
    e.preventDefault();
  }) 
});

【讨论】:

    【解决方案3】:

    使用它来防止引导模式窗口在提交表单时关闭

    $( "form" ).submit(function( event ) {
      event.preventDefault();
    });
    

    【讨论】:

      【解决方案4】:

      如果您想添加多个数据并且希望模态保持打开状态,请使用

      • <button type="button"></button>

      如果你想在提交数据后关闭模态框,你必须使用

      • <button type="submit"></button>

      【讨论】:

        【解决方案5】:

        这就是我在程序中的做法,希望对您有所帮助。

        这是触发模式的按钮。在这里,我禁用了模式外的键盘和鼠标单击。

        <button type="button" data-toggle="modal" data-target="#modalDivId"
                        data-backdrop="static" data-keyboard="false">
        

        这是模态 div,带有一个表单和一个提交按钮。将 ... 替换为您的模态内容。

        <div class="modal fade" id="modalDivId" role="dialog">
         <form>
           ...
          <button type="submit" onClick="myFunction()" class="btn btn-success">
             Submit
          </button>
         </form>
        </div>
        

        最后是点击提交按钮时触发的功能。这里event.preventDefault();会阻止表单提交的默认动作,所以modal会保留。

        function myFunction() {
            $("form").on("submit", function (event) {
                event.preventDefault();
                $.ajax({
                    url: "yoururl",
                    type: "POST",
                    data: yourData,
                    success: function (result) {
                        console.log(result)
                    }
                });
            })
        }
        

        【讨论】:

          【解决方案6】:

          删除以下内容:

          data-dismiss = "modal"
          

          来自不应关闭对话框的按钮。之后,您可以使用 $( "#TheDialogID" ).modal( "hide" ) 关闭对话框。示例:

          <!--<SimpleModalBox>-->
          <div class="modal fade" id="SimpleModalBox" tabindex="-1" role="dialog" aria-labelledby="SimpleModalLabel" aria-hidden="true">
            <!--<modal-dialog>-->
            <div class = "modal-dialog">
          
              <!--<modal-content>-->
              <div class = "modal-content">
          
                <div class = "modal-header">
                  <button type = "button" class = "close" data-dismiss = "modal">
                    <span aria-hidden="true">&times;</span>
                  </button>
                  <h4 class = "modal-title" id = "SimpleModalLabel">Title for a simple modal</h4>
                </div>
          
                <div id="TheBodyContent" class = "modal-body">
                  Put your content here
                </div>
          
                <div class = "modal-footer">
                  <button type = "button" class = "btn btn-default" data-dismiss = "modal">Yes</button>
                  <button type = "button" class = "btn btn-default" onclick="doSomethingBeforeClosing()">Don't close</button>
                  <button type = "button" class = "btn btn-default" data-dismiss = "modal">Cancel</button>
                </div>
          
              </div>
              <!--<modal-content>-->
          
            </div>
            <!--/modal-dialog>-->
          </div>
          <!--</SimpleModalBox>-->
          

          Javascript 代码:

          //#region Dialogs
          function showSimpleDialog() {
            $( "#SimpleModalBox" ).modal();
          }
          
          function doSomethingBeforeClosing() {
            //Do something. For example, display a result:
            $( "#TheBodyContent" ).text( "Operation completed successfully" );
          
            //Close dialog in 3 seconds:
            setTimeout( function() { $( "#SimpleModalBox" ).modal( "hide" ) }, 3000 );
          }
          //#endregion Dialogs
          

          【讨论】:

          • 谢谢,今天的英雄!
          【解决方案7】:

          看 => http://getbootstrap.com/2.3.2/javascript.html#modals

          使用

          data-backdrop="static"
          

          $("#yourModal").modal({"backdrop": "static"});
          

          编辑1:

          在您打开模式的链接上 ==>

          <a href="#" onclick="$('#yourModal').modal({'backdrop': 'static'});" class="btn btn-primary">yourModal</a>
          

          编辑2:

          http://jsfiddle.net/BVmUL/39/

          【讨论】:

          • 嗨@ZooL,感谢您的建议。我已经尝试了这两种方法,奇怪的是,JS 可以工作,而标记却不能。然而 JS 路由并没有完全削减它,因为模式窗口显示在页面加载时,而不是在链接点击时。
          • @dura 请看我的编辑
          • 您是否尝试过您的编辑?我注意到您删除了双引号,但我仍然认为它不起作用,因为必须将 href 设置为模态窗口的 id。
          • @dura 你必须尝试。点击链接时会发生 onclick 事件。
          • 我已经尝试过@ZooL。单击“提交”按钮后,该窗口仍会关闭。我尝试将 onclick 事件添加到该按钮,但这也不起作用。
          猜你喜欢
          • 2018-07-15
          • 2011-06-03
          • 1970-01-01
          • 2016-02-02
          • 2021-08-02
          • 1970-01-01
          • 2012-08-14
          • 2014-05-30
          • 2021-03-05
          相关资源
          最近更新 更多