我有一个模态位于另一个模态中,并且我设法使内部模态关闭而不影响另一个模态。问题是,当第二个模式关闭时,它会触发'hidden.bs.modal'
事件本身和第一个模型。
<!-- My Html -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">Open demo modal</button>
<div class="modal" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Demo Modal</h4>
</div>
<div class="modal-body">
<p>
<a href="#" data-toggle="modal" data-target="#uploadImage" class="btn btn-primary">Upload image</a>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
<div class="modal" id="uploadImage" tabindex="-1" role="dialog" aria-labelledby="uploadImage-title" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="uploadImage-title">Upload new image</h4>
</div>
<div class="modal-body">
Testing Area
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="btnUploadCancel">Cancel</button>
<button type="button" class="btn btn-success">Accept</button>
</div>
</div>
</div>
</div>
</div>
<!-- My JS-->
$('#btnUploadCancel').click(function () {
$('#uploadImage').modal('toggle');
});
$(document).on('hidden.bs.modal', '#myModal', function () {
alert("hello");
});
$(document).on('hidden.bs.modal', '#uploadImage', function () {
alert("goodbye");
});
这里有一个jsFiddle 示例 http://jsfiddle.net/wytf57mL/2/我做的。
这个问题的原因是,我只需要在第二个模态被隐藏时触发一个操作,然后在第一个模态被隐藏时触发其他操作。关于如何使用每个人的事件来解决这个问题的任何想法???
Note: 第二个模态必须位于另一个模态内部,因为它们被称为部分视图。
我猜测这些模态元素被异步引入到页面,这就是为什么您使用绑定到文档而不是绑定的委托事件侦听器hidden.bs.modal
直接到#myModal
and #uploadImage
他们自己。如果情况并非如此,并且您可以直接进行绑定,我建议使用这种方法来捕获hidden
事件于#uploadImage
本身,并使用类似的方法防止它在 DOM 树中冒泡event.stopPropagation();
.
不过,您也可以继续将此处理程序委托给文档,并使用target
的财产Event
对象传递到处理程序回调中以确定哪个元素是事件的实际源:
$(document).on('hidden.bs.modal', '#myModal', function (event) {
if (event.target.id == 'uploadImage') {
// do stuff when the upload dialog is hidden.
}
else if (event.target.id == 'myModal') {
// do stuff when the outer dialog is hidden.
}
});
P.S.:正如您可能已经知道的,Bootstrap 框架不支持重叠模式对话框 http://getbootstrap.com/javascript/#overlapping-modals-not-supported。当您继续在模态中嵌套模态时,请注意这一点,特别是关于通过标记 API 初始化的解雇元素和data-dismiss="modal"
.
P.P.S.:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)