我已经寻找了一段时间,但我找不到解决方案。我想要以下内容:
在 Bootstrap 模式中打开一个 URL。我有这个工作不正常。所以内容是动态加载的。
当用户在此模式中按下按钮时,我希望隐藏当前模式,然后立即使用新 URL(用户单击)打开一个新模式。第二个模态的这个内容也是动态加载的。
如果用户随后关闭了第二个模态,则第一个模态必须再次返回。
我已经盯着这个好几天了,希望有人能帮助我。
提前致谢。
我知道这是一个迟到的答案,但它可能有用。正如@karima 上面提到的,这是完成此任务的正确且干净的方法。您实际上可以一次触发两个函数; trigger
和 dismiss
模态。
HTML 标记;
<!-- Button trigger modal -->
<ANY data-toggle="modal" data-target="TARGET">...</ANY>
<div class="modal fade" id="SELECTOR" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body"> ... </div>
<div class="modal-footer"> <!-- ↓ --> <!-- ↓ -->
<ANY data-toggle="modal" data-target="TARGET-2" data-dismiss="modal">...</ANY>
</div>
</div>
</div>
</div>
没有看到具体的代码,很难给你一个准确的答案。但是,从 Bootstrap 文档中,您可以像这样隐藏模式:
$('#myModal').modal('hide')
然后,在隐藏后显示另一个模态:
$('#myModal').on('hidden.bs.modal', function () {
// Load up a new modal...
$('#myModalNew').modal('show')
})
您将不得不找到一种将 URL 推送到新模式窗口的方法,但我认为这很简单。如果没有看到代码,很难举一个例子。
这不完全是响应,但当您想要关闭当前模式并打开新模式时它很有用。
在同一个按钮的 html 中,您可以要求使用 data-dismiss 关闭当前模态,并直接使用 data-target 打开一个新模态:
<button class="btn btn-success"
data-toggle="modal"
data-target="#modalRegistration"
data-dismiss="modal">Register</button>
data-dismiss="modal"
的问题是,当您关闭第二个模式时,它会将您的内容向左移动。
data-dismiss="modal"
的问题是它会将您的内容向左移动
我正在分享对我有用的方法,问题陈述是从 pop2
打开 pop1
JS代码
var showPopup2 = false;
$('#popup1').on('hidden.bs.modal', function () {
if (showPopup2) {
$('#popup2').modal('show');
showPopup2 = false;
}
});
$("#popup2").click(function() {
$('#popup1').modal('hide');
showPopup2 = true;
});
我使用这种方法:
$(function() {
return $(".modal").on("show.bs.modal", function() {
var curModal;
curModal = this;
$(".modal").each(function() {
if (this !== curModal) {
$(this).modal("hide");
}
});
});
});
通过使用以下代码,您可以隐藏第一个模态并立即打开第二个模态,通过使用相同的策略,您可以隐藏第二个模态并显示第一个。
$("#buttonId").on("click", function(){
$("#currentModalId").modal("hide");
$("#currentModalId").on("hidden.bs.modal",function(){
$("#newModalId").modal("show");
});
});
您需要将以下属性添加到要添加此功能的链接或按钮:
data-dismiss="modal" data-toggle="modal" id="forgotPassword" data-target="#ModalForgotPassword"
详细博客:http://sforsuresh.in/bootstrap-modal-window-close-current-open-new-modal/
data-dismiss="modal"
它用于关闭现有打开的模型。您可以将其设置为新模型
上面提到在同一个按钮的html中,可以用data-dismiss请求关闭当前的modal,直接用data-target打开一个新的modal:
<button class="btn btn-success" data-toggle="modal" data-target="#modalRegistration" data-dismiss="modal">Register</button>
但这会导致滚动条消失,你会注意到如果第二个模态比第一个高
所以解决方法是在modal inline style中添加如下样式:
Style = "overflow-y : scroll ; "
对于引导 v4
您可以通过将 data-dismiss="modal"
和 data-toggle="modal"
放在同一个 HTML 元素中来切换模式。您还需要将 data-target
属性设置为要打开的模式。
这是一个例子:
<button type="button" class="btn btn-primary" data-dismiss="modal" data-toggle="modal" data-target="#Modal2" >
Open second modal
</button>
请记住为每个模态设置一个 id 并将数据目标指向您要打开的那个
对于引导程序 v5
与 v4 相同,只是使用属性 data-bs-toggle
data-bs-dismiss
和 data-bs-target
像这样:
<button class="btn btn-primary" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#Modal2" >
Open second modal
</button>
他们提供了这个 in the v5 documentation 的示例
笔记:
这两个模态需要彼此独立,而不是相互嵌套,才能使其工作。因此,如果您使用的是 MVC 框架,例如 ASP.NET MVC,并且将第一个模态作为其自己的局部视图,则不能在该视图中拥有第二个模态。您需要将第二个模式放在父视图中。
使用 BootStrap 3,您可以尝试以下操作:-
var visible_modal = jQuery('.modal.in').attr('id'); // modalID or undefined
if (visible_modal) { // modal is active
jQuery('#' + visible_modal).modal('hide'); // close modal
}
经测试可使用:http://getbootstrap.com/javascript/#modals(首先单击“启动演示模式”)。
.attr
位,是吗?这不是同样有效吗? var visible_modal = jQuery('.modal.in'); if (visible_modal) { visible_modal.modal('hide'); }
。
我有完全相同的问题,我的解决方案是仅当模式对话框具有 [role="dialog"] 属性时:
/*
* Find and Close current "display:block" dialog,
* if another data-toggle=modal is clicked
*/
jQuery(document).on('click','[data-toggle*=modal]',function(){
jQuery('[role*=dialog]').each(function(){
switch(jQuery(this).css('display')){
case('block'):{jQuery('#'+jQuery(this).attr('id')).modal('hide'); break;}
}
});
});
我遇到了与@Gravity Grave 相同的问题,如果您使用,滚动将不起作用
data-toggle="modal" data-target="TARGET-2"
和这个结合
data-dismiss="modal"
滚动无法正常工作并恢复为滚动页面而不是模式。这是由于 data-dismiss 从标签中删除了 modal-open 类。
我最后的解决方案是在modal上设置内部组件的html,并使用css淡入/淡出文本。
有同样的问题,写在这里,以防将来有人偶然发现这个问题,并且多个模式也必须滚动(我使用的是 Bootstrap 3.3.7)
我所做的是在我的第一个模式中有一个这样的按钮:
<div id="FirstId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_2">Open modal</div>
它将隐藏第一个然后显示第二个,在第二个模式中,我将有一个如下所示的关闭按钮:
<div id="SecondId" data-dismiss="modal" data-toggle="modal" data-target="#YourModalId_1">Close</div>
所以这将关闭第二个模态并打开第一个模态并进行滚动工作,我将这一行添加到我的 .css 文件中:
.modal {
overflow: auto !important;
}
PS:只是一个旁注,你必须分别拥有这些模态,小模态不能嵌套在第一个模态中,因为你隐藏了第一个模态
所以这是基于引导模式示例的完整示例:
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Launch demo modal
</button>
<!-- Modal 1 -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
Add lorem ipsum here
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal" data-toggle="modal" data-target="#exampleModal2">
Open second modal
</button>
</div>
</div>
</div>
</div>
<!-- Modal 2 -->
<div class="modal fade" id="exampleModal2" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" data-toggle="modal" data-target="#exampleModal">Close</button>
</div>
</div>
</div>
</div>
这段代码,关闭模式打开,打开新模式,但立即关闭新模式。
$(nameClose).modal('hide');
$(nameOpen).modal('show');
我关闭其他后打开新模式的解决方案是:
function swapModals(nameClose,nameOpen) {
$(nameClose).modal('hide');
$(nameClose).on('hidden.bs.modal', function () {
console.log('Fired when hide event has finished!');
$(nameOpen).modal('show');
});
}
使用点击功能:
$('.btn-editUser').on('click', function(){
$('#viewUser').modal('hide'); // hides modal with id viewUser
$('#editUser').modal('show'); // display modal with id editUser
});
小心:
确保您要显示的是一个独立的模态。
在第一个模态中:
用下面的关闭链接替换页脚中的模态关闭链接。
<div class="modal-footer">
<a href="#" data-dismiss="modal" class="btn btn-primary" data-toggle="modal" data-target="#second_model_id">Close</a>
</div>
在第二种模式中:
然后第二个模式用下面的 div 标签替换顶部 div。
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="add text for disabled people here" aria-hidden="true" id="second_model_id">
尝试这个
$('#model1').modal('hide');
setTimeout(function(){
$('#modal2').modal('show');
},400);
在打开一个新的模态之前关闭所有打开的模态
$('.modal').modal('hide'); // close all open modals
$('#login').modal('show'); // open a modal named #login
$("#buttonid").click(function(){
$('#modal_id_you_want_to_hid').modal('hide')
});
// same as above button id
$("#buttonid").click(function(){
$('#Modal_id_You_Want_to_Show').modal({backdrop: 'static', keyboard: false})});
我用另一种方式:
$('#showModal').on('hidden.bs.modal', function() {
$('#easyModal').on('shown.bs.modal', function() {
$('body').addClass('modal-open');
});
});
如果您想在打开新模式时关闭先前打开的模式,那么您必须从 javascript/jquery 执行此操作,方法是首先关闭当前打开的模式,然后给出 400 毫秒超时以允许它关闭,然后打开新模式,如下面的代码:
$('#currentModal').modal('hide');
setTimeout(function() {
//your code to be executed after 200 msecond
$('#newModal').modal({
backdrop: 'static'//to disable click close
})
}, 400);//delay in miliseconds##1000=1second
如果您尝试使用 data-dismiss="modal"
执行此操作,则会出现 @gravity 和 @kuldeep 在评论中提到的滚动问题。
没有一个答案对我有帮助,因为我想实现与问题中提到的完全相同的东西。
为此,我创建了一个 jQuery 插件。
/*
* Raj: This file is responsible to display the modals in a stacked fashion. Example:
* 1. User displays modal A
* 2. User now wants to display modal B -> This will not work by default if a modal is already displayed
* 3. User dismisses modal B
* 4. Modal A should now be displayed automatically -> This does not happen all by itself
*
* Trying to solve problem for: http://stackoverflow.com/questions/18253972/bootstrap-modal-close-current-open-new
*
*/
var StackedModalNamespace = StackedModalNamespace || (function() {
var _modalObjectsStack = [];
return {
modalStack: function() {
return _modalObjectsStack;
},
currentTop: function() {
var topModal = null;
if (StackedModalNamespace.modalStack().length) {
topModal = StackedModalNamespace.modalStack()[StackedModalNamespace.modalStack().length-1];
}
return topModal;
}
};
}());
// http://stackoverflow.com/a/13992290/260665 difference between $.fn.extend and $.extend
jQuery.fn.extend({
// https://api.jquery.com/jquery.fn.extend/
showStackedModal: function() {
var topModal = StackedModalNamespace.currentTop();
StackedModalNamespace.modalStack().push(this);
this.off('hidden.bs.modal').on('hidden.bs.modal', function(){ // Subscription to the hide event
var currentTop = StackedModalNamespace.currentTop();
if ($(this).is(currentTop)) {
// 4. Unwinding - If user has dismissed the top most modal we need to remove it form the stack and display the now new top modal (which happens in point 3 below)
StackedModalNamespace.modalStack().pop();
}
var newTop = StackedModalNamespace.currentTop();
if (newTop) {
// 3. Display the new top modal (since the existing modal would have been hidden by point 2 now)
newTop.modal('show');
}
});
if (topModal) {
// 2. If some modal is displayed, lets hide it
topModal.modal('hide');
} else {
// 1. If no modal is displayed, just display the modal
this.modal('show');
}
},
});
工作小提琴供参考,JSFiddle: https://jsfiddle.net/gumdal/67hzgp5c/
您只需使用我的新 API“showStackedModal()
”而不是“modal('show')
”来调用。隐藏部分仍然可以和以前一样,显示&的堆叠方式。隐藏模式会自动得到照顾。
BootStrap 3.x 的简单而优雅的解决方案。可以通过这种方式重用相同的模态。
$("#myModal").modal("hide");
$('#myModal').on('hidden.bs.modal', function (e) {
$("#myModal").html(data);
$("#myModal").modal();
// do something more...
});
如果您使用 mdb,请使用此代码
var visible_modal = $('.modal.show').attr('id'); // modalID or undefined
if (visible_modal) { // modal is active
$('#' + visible_modal).modal('hide'); // close modal
}
<div class="container">
<h1>Bootstrap modal: close current, open new</h1>
<p class="text-muted">
A proper and clean way to get this done without addtional Javascript/jQuery. The main purpose of this demo is was to answer this
<a href="http://stackoverflow.com/questions/18253972/bootstrap-modal-close-current-open-new">question on stackoverflow</a>
</p>
<hr />
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-1">Launch Modal #1</button>
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-2">Launch Modal #2</button>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3">Launch Modal #3</button>
<!-- [ Modal #1 ] -->
<div class="modal fade" id="demo-1" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title caps"><strong>Demo Modal #1</strong></h4>
</div>
<div class="modal-body">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Input Placeholder..." />
<span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">×</button>
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-2" data-dismiss="modal">Close current, Launch Modal #2</button>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3" data-dismiss="modal">Close current, Launch Modal #3</button>
</div>
</div>
</div>
</div>
<!-- [ Modal #2 ] -->
<div class="modal fade" id="demo-2" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title caps"><strong>Demo Modal #2</strong></h4>
</div>
<div class="modal-body">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Input Placeholder..." />
<span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">×</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-1" data-dismiss="modal">Close current, Launch Modal #1</button>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#demo-3" data-dismiss="modal">Close current, Launch Modal #3</button>
</div>
</div>
</div>
</div>
<!-- [ Modal #3 ] -->
<div class="modal fade" id="demo-3" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<button type="button" class="close" data-dismiss="modal"><i class="icon-xs-o-md"></i></button>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title caps"><strong>Demo Modal #3</strong></h4>
</div>
<div class="modal-body">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Input Placeholder..." />
<span class="input-group-btn"><button class="btn btn-default" type="button">Action</button></span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">×</button>
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#demo-1" data-dismiss="modal">Close current, Launch Modal #1</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#demo-2" data-dismiss="modal">Close current, Launch Modal #2</button>
</div>
</div>
</div>
</div>
<hr />
<h3 class="caps">Usage:</h3>
<pre class="prettyprint"><!-- Button trigger modal -->
<ANY data-toggle="modal" data-target="TARGET">...</ANY>
<div class="modal fade" id="SELECTOR" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body"> ... </div>
<div class="modal-footer"> <!-- ↓ --> <!-- ↓ -->
<ANY data-toggle="modal" data-target="TARGET-2" data-dismiss="modal">...</ANY>
</div>
</div>
</div>
</div></pre>
</div> <!-- end .container -->
<hr />
<footer class="text-center"><a href="https://twitter.com/_elmahdim">@_elmahdim</a></footer>
<br />
<br />
我可能有点晚了,但我想我已经找到了可行的解决方案。
必需的 -
jQuery
所有带有关闭/关闭按钮的模式,其属性设置如下 -
<button type="button" class="btn close_modal" data-toggle="modal" data-target="#Modal">Close</button>
请查看添加到按钮类的 close_modal 类
现在要关闭所有现有的模式,我们将调用
$(".close_modal").trigger("click");
所以,无论你想在哪里打开一个模态
只需添加上面的代码,所有打开的模式都会关闭。
然后添加您的正常代码以打开所需的模式
$("#DesiredModal").modal();
隐藏模式对话框。
方法一:使用Bootstrap。
$('.close').click();
$("#MyModal .close").click();
$('#myModalAlert').modal('hide');
方法 2: 使用 stopPropagation()
。
$("a.close").on("click", function(e) {
$("#modal").modal("hide");
e.stopPropagation();
});
方法3:显示方法调用后。
$('#myModal').on('shown', function () {
$('#myModal').modal('hide');
})
方法 4:使用 CSS。
this.display='block'; //set block CSS
this.display='none'; //set none CSS after close dialog
只需复制并粘贴此代码,您就可以尝试两种模式。第二个模态在关闭第一个模态后打开:
<!-- Button to Open the Modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">
Open modal
</button>
<!-- The Modal -->
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Modal Heading</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<!-- Modal body -->
<div class="modal-body">
Modal body..
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- The Modal 2 -->
<div class="modal" id="myModal2">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">Second modal</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<!-- Modal body -->
<div class="modal-body">
Modal body..
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
$('#myModal').on('hidden.bs.modal', function () {
$('#myModal2').modal('show')
})
</script>
干杯!
templateUrl
和windowClass
属性做同样的事情吗?data-dismiss="modal"
-webkit-backface-visibility: hidden;