我已将模态窗口用于向导实现,该过程大约有4,5个步骤。我需要在最后一步(onFinish)和OnCancel步骤之后完全销毁它,而无需刷新页面。我当然可以隐藏它,但是当我再次打开它时,隐藏模式窗口将还原所有内容。有人可以帮我解决这个问题吗?
谢谢任何提示答案对我都有帮助。
我已将模态窗口用于向导实现,该过程大约有4,5个步骤。我需要在最后一步(onFinish)和OnCancel步骤之后完全销毁它,而无需刷新页面。我当然可以隐藏它,但是当我再次打开它时,隐藏模式窗口将还原所有内容。有人可以帮我解决这个问题吗?
谢谢任何提示答案对我都有帮助。
remove
确实会删除模式,因此无法再次打开它。Twitter Bootstrap的模式窗口实际上并不是什么神奇的东西,因此,当您重新打开模式对话框时,必须手动重置所有表单元素(这是我的经验)。
Answers:
如果是bootstrap 3,则可以使用:
$("#mimodal").on('hidden.bs.modal', function () {
$(this).data('bs.modal', null);
});
$("#mimodal").removeClass('fade').modal('hide')
$(this).html("");
注意:此解决方案仅适用于版本3之前的Bootstrap。有关Bootstrap 3的答案,请参考user2612497的答案。
您想要做的是:
$('#modalElement').on('hidden', function(){
$(this).data('modal', null);
});
这将导致模态每次显示时都进行初始化。因此,如果您正在使用远程内容加载到div或其他内容中,则每次打开时都会重新执行。每次隐藏模态实例后,您都只是销毁它。
或者,每当您要触发元素的销毁时(如果实际上并非每次都隐藏它),您只需调用中间行:
$('#modalElement').data('modal', null);
Twitter引导程序查找其实例位于data属性中,如果一个实例存在,它将切换它,如果一个实例不存在,它将创建一个新实例。
希望能有所帮助。
$("#modalElement").removeData("modal");
我使用的是Bootstrap 2.3.1和jQuery 1.9.1
对于3.x版本
$( '.modal' ).modal( 'hide' ).data( 'bs.modal', null );
对于2.x版本(危险;请阅读下面的注释)在创建引导模式时,要更改页面上的三个元素。因此,如果要完全回滚所有更改,则必须为每个更改手动进行。
$( '.modal' ).remove();
$( '.modal-backdrop' ).remove();
$( 'body' ).removeClass( "modal-open" );
style="padding-right: 17px;"
还将在Bootstrap 3.2中进行设置,body
以说明隐藏的滚动条。底线:使用第3版中的Bootstraps API $('.modal').modal('hide').data('bs.modal', null);
。
您可以完全销毁模式,而无需重新加载页面。
$("#modal").remove();
$('.modal-backdrop').remove();
但它将完全从您的HTML页面中删除模式信息。此模态皮革显示后将无法使用。
body
建议的解决方案进行更改,因此不会回滚所有更改。
据我了解,您是不想删除它还是隐藏它?因为您以后可能想重用它..但是如果您再次打开它,不希望它具有旧内容吗?
<div class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<a href="#" class="btn">Close</a>
<a href="#" class="btn btn-primary">Save changes</a>
</div>
</div>
如果您想将其用作动态模板,请执行以下操作
$(selector).modal({show: true})
....
$(selector).modal({show: false})
$(".modal-body").empty()
....
$(".modal-body").append("new stuff & text")
$(selector).modal({show: true})
如果您的模式中有iframe,则可以通过以下代码删除其内容:
$('#myModal').on('hidden.bs.modal', function(){
$(this).find('iframe').html("");
$(this).find('iframe').attr("src", "");
});
我的方法是使用clone()
jQuery方法。它创建了元素的副本,这就是您想要的:第一个未更改的模式的副本,您可以根据需要替换它:Demo(jsfiddle)
var myBackup = $('#myModal').clone();
// Delegated events because we make a copy, and the copied button does not exist onDomReady
$('body').on('click','#myReset',function() {
$('#myModal').modal('hide').remove();
var myClone = myBackup.clone();
$('body').append(myClone);
});
我使用的标记是最基本的标记,因此您只需要绑定正确的元素/事件,就应该重置向导。
注意绑定委托事件,或在每次重置时重新绑定模态的内部元素,以使每个新模态的行为相同。
我有一个相同的场景,我将在单击按钮时打开一个新的模式。完成后,我想将其从页面中完全删除...我使用remove删除模式。
$("#wizard").click(function() {
/* find if wizard is already open */
if($('.wizard-modal').length) {
$('.wizard-modal').remove();
}
});
$('#myModal').on('hidden.bs.modal', function () {
$(this).data('bs.modal', null).remove();
});
//Just add .remove();
//Bootstrap v3.0.3
这完全从DOM中删除了模态,也适用于“附加”模态。
$(document).on('hidden.bs.modal','#pickoptionmodal',function(e){
e.preventDefault();
$("#pickoptionmodal").remove();
});
如果模态阴影保持较暗并且不会显示多个模态,那么这将很有帮助
$('.modal').live('hide',function(){
if($('.modal-backdrop').length>1){
$('.modal-backdrop')[0].remove();
}
});
$(document).on('hidden.bs.modal', '.modal', function(e) { if ($('.modal-backdrop').length) { $('.modal-backdrop').remove(); } });
我必须对不同的链接点击使用相同的模式。我只是用隐藏回调中模式的空“”替换了html内容。
单行完整去除生皮(ES6)
$("#myModal").on('hidden.bs.modal', (e)=>e.currentTarget.remove());
使用ui-router,这可能是您的一个选择。它将关闭时重新加载控制器,以便在下次触发之前重新初始化模式内容。
$("#myModalId").on('hidden.bs.modal', function () {
$state.reload(); //resets the modal
});
$(modal_selector).remove()
。