jQuery Bootstrap多个模态框,如何仅隐藏当前/顶部模态框

10

我有一个模态表单,有时需要打开第二个模态框来设置或显示一些数据。我能够成功启动第一个和第二个模态框,但是当我关闭“顶部”模态框时,两个模态框都被隐藏了。有没有可能一次只隐藏一个模态框?

展示模态框一:

$('#content').on('click', "a#AddItemModal", function () {
    var id = $(this).attr('value');

    var val = '/AddItems/id:' + id;

    $('#addItemBody').load(val);
    $('#addItemModal').modal({});

});

模态框一:

<div class="modal fade hide" id="addItemModal" tabindex="-1" role="dialog">
    <div class="modal-body">
        <p id="addItemBody"></p>
    </div>
    <div class="modal-footer">
        <a href="#" class="btn"  data-dismiss="modal" id="good">Close</a>
    </div>
</div>

显示模态框二:

$('#test_embed').click(function () {
        var val = $('#formEmbed').val();
        $('#myModalLabel').html('Embed Preview');
        $('#embedBody').html(val);
        $('#embedModal').modal({});
    });

第二个弹窗:

<div class="modal fade hide" id="embedModal" tabindex="-1" role="dialog">
    <div class="modal-header">
        <h3 id="myModalLabel">Embed Preview</h3>
    </div>
    <div class="modal-body">
        <p id="embedBody"></p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal">Close</button>
    </div>
</div>
4个回答

14

通常我会确保第二个模态框不是子模态框,而是独立于父级模态框之外的。 这是因为 data-dismiss="modal" 会关闭当前模态框以及所有父级模态框。

所以请在可能的情况下将其改为:

<div class="modal fade" id="Model1" tabindex="-1" role="dialog">
</div>
<div class="modal fade" id="Model2" tabindex="-1" role="dialog">
</div>

<div class="modal fade" id="Model1" tabindex="-1" role="dialog">
   <div class="modal fade" id="Model2" tabindex="-1" role="dialog">
   </div>
</div>

或者我移除 data-dismiss="modal",并为我想要用来关闭模态框的链接或按钮分配类 "close",然后使用一个 jQuery 事件,我可以仅关闭/隐藏关闭按钮的模态框。

 $('#mycontainer').on('click', '.modal .close', function () {
        $(this).closest('.modal').modal('hide');
    });

通常我会确保第二个模态框不是父级模态框的子级。因为 data-dismiss="modal" 会关闭当前模态框和所有父级模态框。 => 没错,谢谢 - Quy Le
我选择了第二个选项,但是所有的模态框仍然关闭。 - kuntal

12

我认为你应该手动关闭Modal,因为当你点击关闭按钮时,会触发“close”事件,隐藏所有的Modal。要手动关闭Modal,请调用$('#addItemModal').modal('hide');以关闭第一个Modal和$('#embedModal').modal('hide');以关闭第二个Modal。

现在你可以在Modal中放置一个按钮来调用这些内容:

第一个Modal:

<div class="modal fade hide" id="addItemModal" tabindex="-1" role="dialog">
    ...
    <div class="modal-footer">
        <a href="#" class="btn"  data-number="1" id="good">Close</a>
    </div>
</div>

第二个弹出框:

<div class="modal fade hide" id="embedModal" tabindex="-1" role="dialog">
    ...
    <div class="modal-footer">
        <button class="btn" data-number="2">Close</button>
    </div>
</div>

Javascript:

$("button[data-number=1]").click(function(){
    $('#addItemModal').modal('hide');
});

$("button[data-number=2]").click(function(){
    $('#embedModal').modal('hide');
});

这正是我一直在寻找的!它完美地运作,并且可以应用于几个层次的模态框。我喜欢它,谢谢! - richj

0
一个模态框和三个选项卡。
<div class="modal fade bd-example-modal-lg" id="QualityControlMeasurementModal" data-backdrop="static" data-keyboard="false">
      <div class="modal-dialog modal-lg" style="min-width: 80rem;">    
        <div class="modal-content">    
          <div class="modal-header">
            <h5>...</h5>
          </div>
          <div class="modal-body">
            <div class="form-group  row">
              <div class="row col-12"> 
                <div class="col">
                  <button type="button" class="form-control btn btn-primary btn-lg ">...</button>
                </div>
                <div class="col">
                  <button type="button" class="form-control btn btn-success btn-lg">...</button>
                </div>
                <div class="col">
                  <button type="button"  data-dismiss="modal" class="form-control close btn-lg btn btn-danger"
                    style="background-color: #cc0000;" >...</button>
                </div>
              </div>
              <div class="tab-content" id="myTabContent">
                <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
                <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
                <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">...</div>
              </div>
              <hr>       
         </div>
        </div>
       </div>
      </div>
     </div>

隐藏:(数据-解除=模式)

0

只需将您的模态框附加到body - 在模态框创建后

$('body').append('#addItemModal');

现在将仅关闭活动的顶部模态框


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接