我已经使用模态窗口进行了大约4,5步的向导实现。我需要在最后一步(onFinish)和 OnCancel步骤之后完全销毁它而不进行页面刷新。我当然可以隐藏它,但是当我再次打开它时,隐藏模态窗口会恢复所有内容。谁能在这个问题上帮助我?
由于 任何提示答案对我都有帮助。
答案 0 :(得分:116)
如果是bootstrap 3,你可以使用:
$("#mimodal").on('hidden.bs.modal', function () {
$(this).data('bs.modal', null);
});
答案 1 :(得分:40)
注意:此解决方案仅适用于版本3之前的Bootstrap。对于Bootstrap 3答案,请参阅this one by user2612497。
您想要做的是:
$('#modalElement').on('hidden', function(){
$(this).data('modal', null);
});
这将导致模态在每次显示时自行初始化。因此,如果您使用远程内容加载到div或其他任何内容,它将在每次打开时重新执行。你只是在每次隐藏后都会破坏模态实例。
或者每当你想要触发元素的破坏时(如果实际上并非每次都隐藏它),你只需要调用中间行:
$('#modalElement').data('modal', null);
Twitter引导程序查找其实例位于数据属性中,如果存在实例,则只需切换它,如果实例不存在,则会创建一个新实例。
希望有所帮助。
答案 2 :(得分:18)
适用于3.x版
$( '.modal' ).modal( 'hide' ).data( 'bs.modal', null );
对于2.x版本(风险;阅读下面的评论) 当您创建引导模式时,页面上的三个元素将被更改。因此,如果要完全回滚所有更改,则必须手动为每个更改执行此操作。
$( '.modal' ).remove();
$( '.modal-backdrop' ).remove();
$( 'body' ).removeClass( "modal-open" );
答案 3 :(得分:12)
您可以通过这种方式完全销毁模态,而无需重新加载页面。
$("#modal").remove();
$('.modal-backdrop').remove();
但它会从您的html页面中完全删除模式。此模态隐藏显示后无效。
答案 4 :(得分:3)
据我所知,你不想删除它,也不隐藏它?因为您可能希望以后重复使用它...但是如果您再次打开它,不希望它有旧内容吗?
<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})
答案 5 :(得分:3)
jQuery的强大功能。 $(selector).modal('hide').destroy();
将首先删除您可能具有滑动效果的sinds,然后完全删除该元素,但是如果您希望用户能够在完成步骤后再次打开模式。您可能只想更新您想要重置的设置,以便重置模式中的所有输入,如下所示:
$(selector).find('input, textarea').each(function(){
$(this).val('');
});
答案 6 :(得分:3)
我已经尝试过接受过的答案,但它似乎并不适合我,而且我也不知道接受的答案是如何起作用的。
$('#modalId').on('hidden.bs.modal', function () {
$(this).remove();
})
这对我来说非常好。 BS版本&gt; 3
答案 7 :(得分:3)
如果您的模式中有iframe,则可以通过以下代码删除其内容:
$('#myModal').on('hidden.bs.modal', function(){
$(this).find('iframe').html("");
$(this).find('iframe').attr("src", "");
});
答案 8 :(得分:2)
还可以在Bootstrap 4.x上工作
$('#modal_ID').modal( 'hide' ).data( 'bs.modal', null );
答案 9 :(得分:2)
我的方法是使用jQuery的clone()
方法。它会创建元素的副本,这就是您想要的内容:您可以根据自己的意愿替换的第一个未更改的模式的副本: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);
});
我使用的标记是最基本的,所以你只需要绑定正确的元素/事件,你应该重置你的向导。
小心与delegated events绑定,或在每次重置时重新绑定模态的内部元素,以便每个新模态的行为方式相同。
答案 10 :(得分:2)
这是我的解决方案:
this.$el.modal().off();
答案 11 :(得分:2)
bootstrap 3 + jquery 2.0.3:
$('#myModal').on('hide.bs.modal', function () {
$('#myModal').removeData();
})
答案 12 :(得分:1)
我有一个相同的场景,我会在按钮点击上打开一个新模态。一旦完成,我想完全从我的页面中删除它...我使用删除删除模式..在按钮单击我会检查模态是否存在,如果是真我会破坏它并创建一个新的模态..
$("#wizard").click(function() {
/* find if wizard is already open */
if($('.wizard-modal').length) {
$('.wizard-modal').remove();
}
});
答案 13 :(得分:1)
$('#myModal').on('hidden.bs.modal', function () {
$(this).data('bs.modal', null).remove();
});
//Just add .remove();
//Bootstrap v3.0.3
答案 14 :(得分:0)
这对我有用。
$('.modal-backdrop').removeClass('in');
$('#myDiv').removeClass('in');
对话框和背景消失了,但是下次我点击按钮时它们又回来了。
答案 15 :(得分:0)
适用于Bootstrap v3.3.6
$('#dialog').modal()
.on('hide.bs.modal', function () {
// Some Code
}).on('shown.bs.modal', function () {
// Some Code
}).on('hidden.bs.modal', function () {
$("#dialog").off();
});
答案 16 :(得分:0)
只有这对我有用
$('body').on('hidden.bs.modal', '.modal', function() {
$('selector').val('');
});
安全强制选择器将它们设为空白是因为bootstrap和jquery版本可能是导致此问题的原因
答案 17 :(得分:0)
这完全删除了DOM中的模态,正在为&#34;附加&#34;模态也是如此。
n
答案 18 :(得分:0)
隐藏(ES6)上的单行完全删除
$("#myModal").on('hidden.bs.modal', (e)=>e.currentTarget.remove());
答案 19 :(得分:0)
使用ui-router,这可能是您的选择。它会在关闭时重新加载控制器,以便在下次触发之前重新初始化模态内容。
$("#myModalId").on('hidden.bs.modal', function () {
$state.reload(); //resets the modal
});
答案 20 :(得分:0)
在通过单击按钮关闭模态之后,我必须立即销毁模态,因此我提出了以下建议。
$("#closeModal").click(function() {
$("#modal").modal('hide').on('hidden.bs.modal', function () {
$("#modal").remove();
});
});
请注意,这适用于Bootstrap 3。
答案 21 :(得分:0)
如果模态阴影保持较暗并且不显示多个模态,那么这将有所帮助
$('.modal').live('hide',function(){
if($('.modal-backdrop').length>1){
$('.modal-backdrop')[0].remove();
}
});
答案 22 :(得分:-4)
我不知道这听起来怎么样但这对我有用............
$("#YourModalID").modal('hide');