【问题标题】:Only show modal after validation check and form has been submitted仅在验证检查和表单提交后显示模式
【发布时间】:2018-03-31 06:55:13
【问题描述】:

目前有很多示例,但我无法使其正常工作。只有在我的表单通过简单验证并提交后,我才尝试加载我的模式。现在它只是在我单击提交时加载模式,即使它未通过验证。

例如下面,复选框是必填字段,如果我不选中它并单击提交验证错误加载,但模态也是如此。

<form method="post" action="" data-toggle="modal" onsubmit="return myModal(this)">
        <input type="checkbox" name="vehicle" value="Bike" required>I accept this<br>
        <button type="submit" value="Submit" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
        <input type="submit" value="Submit" />
</form>


<div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog">

            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>

                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>

        </div>
    </div>

我在网上找到了一个使用 Jquery 的示例,它运行良好,但它没有加载模式。

<form method="post" action="" onsubmit="return muModal(this)">

    <input type="checkbox" name="vehicle" value="Accept" required>Accept<br>

    <input type="submit" value="Submit" />
</form>


<script>
    function muModal(f)
    {
        var form=f,
            modal=$('<div/>', {
                'id':'alert',
                'html':'<iframe src="http://test.com/preloader"></iframe>'
            })
                .dialog({
                    'modal':true,
                    'width':800,
                    'height':'auto',
                    'buttons': {
                        'OK': function() {
                            $(this).dialog( "close" );
                            // do something, maybe call form.submit();
                        }
                    }
                });
        return false;
    }
</script>

请注意,表单仍然需要提交,我只是希望在提交过程中弹出模式。

【问题讨论】:

  • 您的验证码在哪里?
  • @ProEvilz ,感谢您的回复,就像我说的很简单。我只是在复选框中使用了必填字段。

标签: javascript jquery bootstrap-modal


【解决方案1】:

我遇到了同样的问题,这就是我所做的似乎有效的方法。 创建两个按钮,而不是打开模式的“提交”类型的单个按钮:

第一个按钮:输入“按钮”,触发表单验证。如果表单被验证,触发第二个按钮的点击

第二个按钮:输入“提交”并隐藏。这是将打开模式的按钮。

<form method="post" action="" data-toggle="modal" onsubmit="return myModal(this)">
    <input type="checkbox" name="vehicle" value="Bike" required>I accept this<br>

    <!-- button with onclick event that triggers the form validation. If the form is valid, triggers click of second button -->
    <button type="button" value="buttonValue" class="btn btn-info btn-lg" onclick="if(formIsValid() $('#triggerModal').click();)">button name</button>

    <!-- hidden submit button -->
    <button type="submit" id="triggerModal" hidden value="Submit" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal"></button>  

</form>

【讨论】:

    【解决方案2】:

    我认为这就是我理解的你想要的?

    $('#myForm').on('submit', function(e) {
      
      e.preventDefault(); //stop submit
      
      if ($('#myCheck').is(':checked')) {
      //Check if checkbox is checked then show modal
        $('#myModal').modal('show');
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
    
    
    <form method="post" action="" data-toggle="modal" id="myForm">
      <input id="myCheck" type="checkbox" name="vehicle" value="Bike" required>I accept this<br>
    
      <input type="submit" value="Submit" />
    </form>
    
    
    <div class="modal fade" id="myModal" role="dialog">
      <div class="modal-dialog">
    
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
    
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
          </div>
    
        </div>
      </div>

    【讨论】:

    • 谢谢你,现在唯一的问题是当我填写帖子网址时,它不运行,只是模式加载
    • 我认为它与 e.preventDefault(); //停止提交
    • @xTRIFAC70Rx 你能解释一下这个 URL 应该做什么吗?
    • 哦,你的意思是提交表单的表单 URL?
    • 是的,所以在弹出模式时表单仍应在后台提交。
    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多