Change backdrop to static for open bootstrap modal

后端 未结 5 2053
感情败类
感情败类 2020-12-19 05:33

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 th

相关标签:
5条回答
  • 2020-12-19 05:49

    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;
    });
    
    0 讨论(0)
  • 2020-12-19 06:02

    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;
    
    0 讨论(0)
  • 2020-12-19 06:03

    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.)

    0 讨论(0)
  • 2020-12-19 06:11

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

    $myModal.data("bs.modal")._config.backdrop = value;
    
    0 讨论(0)
  • 2020-12-19 06:13

    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.

    0 讨论(0)
提交回复
热议问题