No permitir que se cierre la ventana modal de Twitter Bootstrap


Estoy creando una ventana modal usando Twitter Bootstrap. El comportamiento predeterminado es que si hace clic fuera del área modal, el modal se cerrará automáticamente. Me gustaría desactivar eso not es decir, no cerrar la ventana modal al hacer clic fuera del modal.

¿Puede alguien compartir código jQuery para hacer esto?

Author: Peter Mortensen, 2012-03-27

18 answers

Creo que desea establecer el valor backdropa static. Si desea evitar que la ventana se cierre al usar la tecla Esc , debe establecer otro valor.

Ejemplo:

<a data-controls-modal="your_div_id"
   data-backdrop="static"
   data-keyboard="false"
   href="#">

O si está utilizando JavaScript:

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
});
 655
Author: Nobita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 18:34:00

Simplemente establezca la propiedad backdrop en 'static'.

$('#myModal').modal({
  backdrop: 'static',
  keyboard: true
})

Es posible que también desee establecer la propiedad keyboard en false porque eso evita que el modal se cierre presionando la tecla Esc en el teclado.

$('#myModal').modal({
  backdrop: 'static',
  keyboard: false
})

myModal es el ID del div que contiene tu contenido modal.

 305
Author: Nirmal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-09 07:42:12

También puede incluir estos atributos en la propia definición modal:

<div class="modal hide fade" data-keyboard="false" data-backdrop="static">
 208
Author: Varun Chatterji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-09 03:34:08

Si ya ha inicializado la ventana modal, es posible que desee restablecer las opciones con $('#myModal').removeData("modal").modal({backdrop: 'static', keyboard: false}) para asegurarse de que se aplicarán las nuevas opciones.

 46
Author: AymKdn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 18:47:48

Anula el evento 'hide' de Bootstrap del Diálogo y detiene su comportamiento predeterminado (para eliminar el diálogo).

Por favor, consulte el siguiente fragmento de código:

   $('#yourDialogID').on('hide.bs.modal', function(e) {

       e.preventDefault();
   });

Funciona bien en nuestro caso.

 33
Author: Sam Jha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 18:58:56

Sí, puedes hacerlo así:

<div id="myModal"  tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel"
     aria-hidden="true"
     data-backdrop="static"  data-keyboard="false">
 29
Author: Satish Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 18:59:42

Algo así como la respuesta de @AymKdn, pero esto le permitirá cambiar las opciones sin volver a inicializar el modal.

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

O si necesita hacer varias opciones, ¡JavaScript with es útil aquí!

with ($('#myModal').data("modal").options) {
    backdrop = 'static';
    keyboard = false;
}

Si el modal ya está abierto, estas opciones solo tendrán efecto la próxima vez que se abra el modal.

 22
Author: Chris Barr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-29 18:49:22

Solo agrega estas dos cosas

data-backdrop="static" 
data-keyboard="false"

Se verá así ahora

<div class="modal fade bs-example-modal-sm" id="myModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">

Desactivará el botón de escape y también el clic en cualquier lugar y ocultar.

 12
Author: Vivek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-16 17:55:38

Puede deshabilitar el comportamiento de clic para cerrar del fondo y hacer que este sea el predeterminado para todos sus modales agregando este JavaScript a su página (asegúrese de que se ejecute después de que se carguen jQuery y Bootstrap JS):

$(function() {
    $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
});
 11
Author: Eric B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-30 20:05:26

Como dice D3VELOPER, el siguiente código lo resuelve:

$('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});

Estoy usando jquery & bootstrap y simplemente removeData('modal') no funciona.

 6
Author: Morgan RotaStabelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-16 09:01:14

Lo mejor que he encontrado es añadir este código al enlace

<!-- Link -->
<a href="#mdl" role="button"  data-backdrop="static" data-keyboard="false" data-toggle="modal" id_team="" ></a>
<-- Div -->
<div id="mdl" class="modal hide fade" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static"></div>
 4
Author: user3634719,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-02 19:00:30

En caso de que alguien venga aquí desde Google tratando de averiguar cómo evitar que alguien cierre un modal, no olvide que también hay un botón de cierre en la parte superior derecha del modal que debe eliminarse.

Usé algunos CSS para ocultarlo:

#Modal .modal-header button.close {
    visibility: hidden;
}

Tenga en cuenta que el uso de "display: none;" se sobrescribe cuando se crea el modal, así que no lo use.

 2
Author: Drew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-02 15:27:15

Si desea desactivar condicionalmente la función backdrop click closing. Puede usar la siguiente línea para establecer la opción backdrop en static durante el tiempo de ejecución.

Bootstrap v3.xx

jQuery('#MyModal').data('bs.modal').options.backdrop = 'static';

Bootstrap v2.xx

jQuery('#MyModal').data('modal').options.backdrop = 'static';

Esto evitará un modelo ya instanciado con la opción backdrop establecida en false (el comportamiento predeterminado ), desde el cierre.

 2
Author: Mohd Abdul Mujib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-18 15:30:53

Puede establecer el comportamiento predeterminado de la ventana emergente modal mediante el uso de la siguiente línea de código:

 $.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
 2
Author: haresh hanat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-16 08:11:17

Hacer eso es muy fácil hoy en día. Basta con añadir:

data-backdrop="static" data-keyboard="false" 

En su divisor modal.

 2
Author: jfindley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-02 19:00:15

Bueno, esta es otra solución que algunos de ustedes podrían estar buscando (como yo estaba..)

Mi problema era similar, el cuadro modal se estaba cerrando mientras el iframe que tenía dentro se estaba cargando, así que tuve que desactivar el despido modal hasta que el Iframe termine de cargarse, y luego volver a habilitar.

Las soluciones presentadas aquí no funcionaban al 100%.

Mi solución fue esta:

showLocationModal = function(loc){

    var is_loading = true;

    if(is_loading === true) {

        is_loading  = false;
        var $modal   = $('#locationModal');

        $modal.modal({show:true});

        // prevent Modal to close before the iframe is loaded
        $modal.on("hide", function (e) {
            if(is_loading !== true) {
                e.preventDefault();
                return false
            }
        });

        // populate Modal
        $modal.find('.modal-body iframe').hide().attr('src', location.link).load(function(){

            is_loading = true;
     });
}};

Así que previno temporalmente que el Modal se cierre con:

$modal.on("hide", function (e) {
    if(is_loading !== true) {
        e.preventDefault();
        return false
    }
});

Pero el var is_loading que volverá a habilitar el cierre después de que el Iframe se haya cargado.

 1
Author: miguelmpn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-13 14:01:43
<button type="button" class="btn btn-info btn-md" id="myBtn3">Static 
Modal</button>

<!-- Modal -->
<div class="modal fade" id="myModal3" role="dialog">
<div class="modal-dialog">
  <!-- Modal content-->
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">×</button>
      <h4 class="modal-title">Static Backdrop</h4>
    </div>
    <div class="modal-body">
      <p>You cannot click outside of this modal to close it.</p>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-
      dismiss="modal">Close</button>
    </div>
   </div>
  </div>
</div>
   <script>
    $("#myBtn3").click(function(){
     $("#myModal3").modal({backdrop: "static"});
    });
   });
  </script>
 1
Author: shiva krishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-06 09:49:38

Para Actualizar el estado de fondo en Bootstrap 4.1.3 después de que se haya mostrado el modal, Usamos la siguiente línea del complemento Bootstrap-Modal-Wrapper. Referencia de código del repositorio del plugin.

$("#yourModalElement").data('bs.modal')._config.backdrop = (true : "static");
 0
Author: mohamed sulibi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-04 19:04:26