Change backdrop to static for open bootstrap modal

跟風遠走 提交于 2019-11-28 03:36:17

问题


Can I change backdrop to 'static' while my modal is open?

I have modal with form submit button. When I click this button I show loading spinner on my modal and that is the moment when I want to change backdrop to static

I tried $('#myModal').modal({backdrop: 'static', keyboard: false}), but I can still close my modal by clicking the backdrop or using escape button.

Second step should be changing backdrop back to true, but I didn't try this yet, because first I need to set backdrop to static.

I could set backdrop to static on modal show, but I want to avoid this and change it after submit.

Any ideas?


回答1:


Ok I solved this. Maybe it is not the best solution, but it is working for my special case.

I added $('#myModal').off('click'); just after I show loading spinner on submit. This prevents from closing modal with mouse click.

There was a problem with disabling escape button, because browsers stops page loading when user press this button. So I decided to hide the spinner to unlock the form with this code:

$(document).on('keydown',function(e) {
  if (e.keyCode == 27) {
    $('#myLoadingSpinner').hide();
  }
});


Edit: I found another solution for backdrop:

$('#myModal').data('bs.modal').options.backdrop = 'static';

I tried this also for keyboard = false, but it doesn't work.




回答2:


You can disallow closing of a modal when clicking outside of it, as well as on esc button. For example, if your modal ID is signUp:

jQuery('#signUp').on('shown.bs.modal', function() {
    jQuery(this).data('bs.modal').options.backdrop = 'static';
    jQuery(this).data('bs.modal').options.keyboard = false;
});



回答3:


The simplest method I've come up with is attaching to the hide.bs.modal event and calling preventDefault(). This doesn't technically set the backdrop to static, but it achieves the same effect in a toggleable manner.

let $myModal = $('#myModal');

function preventHide(e) {
    e.preventDefault();
}

// if you have buttons that are allowed to close the modal
$myModal.find('[data-dismiss="modal"]').click(() => 
    $myModal.off('hide.bs.modal', preventHide));

function disableModalHide() {
    $myModal.on('hide.bs.modal', preventHide);
}

function enableModalHide() {
    $myModal.off('hide.bs.modal', preventHide);
}

(Disclaimer, I didn't test making buttons allowed to hide the modal, as that wasn't my scenario. If it doesn't work, just call .modal('hide') from the click() callback.)




回答4:


I had a modal that could be opened 2 different ways. When the user opened it one way, I wanted them to be able to close the modal. When they opened it the other way I didn't want them to be able to close it.

I found this question and used the solution from the original poster. I also tried adding keyboard which now works:

$('#myModal').data('bs.modal').options.backdrop = 'static';
$('#myModal').data('bs.modal').options.keyboard = false;



回答5:


I had a different JavaScript object returned and thus the following solution:

$myModal.data("bs.modal")._config.backdrop = value;


来源:https://stackoverflow.com/questions/38768034/change-backdrop-to-static-for-open-bootstrap-modal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!