Enlazar una función a Twitter Bootstrap Modal Cerrar


Estoy usando la librería Bootstrap de Twitter en un nuevo proyecto y quiero que parte de la página se actualice y recupere los últimos datos json en el cierre modal. No veo esto en ninguna parte de la documentación puede alguien señalarlo a mí o sugerir una solución.

Dos problemas con el uso de los métodos documentados

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

Adjunto una clase "hide" al modal ya para que no se muestre en la carga de la página para que se cargue dos veces

Incluso si elimino la clase hide y establezco la id del elemento a display:none y agregar console.log("THE MODAL CLOSED"); a la función anterior cuando presiono cerrar no pasa nada.

Author: Liam, 2011-12-03

11 answers

Bootstrap 3

$('#myModal').on('hidden.bs.modal', function () {
    // do something…
})

Véase getbootstrap.com/javascript/#modals-events

Bootstrap 2.3.2

$('#myModal').on('hidden', function () {
    // do something…
})

Véase getbootstrap.com/2.3.2/javascript.html#modals → Eventos

 910
Author: Ricardo Lima,
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-05-01 20:41:10

Bootstrap 4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

Vea este JSFiddle para un ejemplo de trabajo:

Http://jsfiddle.net/aq9Laaew/120440 /

Vea la sección de Eventos Modales de los documentos aquí:

Https://getbootstrap.com/docs/4.1/components/modal/#events

 100
Author: aar0n,
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-07-28 18:34:29

Comenzando Bootstrap 3 (edit: sigue siendo el mismo en Bootstrap 4 ) hay 2 instancias en las que puede activar eventos, siendo:

1. Cuando comienza el evento modal "ocultar"

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2. Cuando el evento "ocultar" modal terminó

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

Ref: http://getbootstrap.com/javascript/#js-events

 40
Author: aesede,
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-05-13 15:39:57

En lugar de "live" necesita usar el evento "on", pero asignarlo al objeto document:

Uso:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});
 12
Author: Oscar,
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-02-27 04:06:29
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});
 12
Author: SUNny.K,
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-03-23 09:08:52

Bootstrap proporcione eventos a los que pueda conectarse modal, como si desea disparar un evento cuando el modal ha terminado de ocultarse al usuario, puede usar el evento hidden.bs.modal así

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

Compruebe un trabajo fiddle aquí lea más sobre los métodos y eventos modales aquí en Documentación

 6
Author: Subodh Ghulaxe,
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-11-25 18:32:08

He visto muchas respuestas con respecto a los eventos bootstrap como hide.bs.modal que se activa cuando se cierra el modal.

Hay un problema con esos eventos: cualquier ventana emergente en el modal (ventanas emergentes, información sobre herramientas, etc.) activará ese evento.

Hay otra forma de capturar el evento cuando se cierra un modal.

$(document).on('hidden','#modal:not(.in)', function(){} );

Bootstrap usa la clase in cuando el modal está abierto. Es muy importante usar el evento hidden ya que la clase in todavía está definida cuando el evento hide es desencadenar.

Esta solución no funcionará en IE8 ya que IE8 no soporta el selector Jquery :not().

 2
Author: Tortus,
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-10-19 20:42:43

Estoy entrando super tarde aquí, pero para las personas que usan modales de Bootstrap con React he estado usando MutationObserver para detectar cambios en la visibilidad de un modal y ajustar el estado en consecuencia - este método podría aplicarse para ejecutar cualquier función cuando el modal está cerrado:

//react stuff
componentDidMount: function() {
    var self = this;
    $(function() {
        $("#example_modal").addClass('modal');
        //use MutationObserver to detect visibility change
        //reset state if closed
        if (MutationObserver) {
        var observer = new MutationObserver(function(mutations) {
            //use jQuery to detect if element is visible
            if (!$('#example_modal').is(':visible')) {
                //reset your state
                self.setState({
                    thingone: '',
                    thingtwo: ''
                });
            }
        });
        var target = document.querySelector('#example_modal');
            observer.observe(target, {
                attributes: true
          });
        }
    });
}

Para aquellos que se preguntan sobre el soporte del navegador moderno, CanIUse tiene cobertura de MutationObserver en alrededor 87%

Espero que ayude a alguien:)

Salud,

Jake

 1
Author: jacobedawson,
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-04-26 00:06:25

Estaba teniendo los mismos problemas que algunos con

$('#myModal').on('hidden.bs.modal', function () {
// do something… })

Debe colocar esto en la parte inferior de la página, colocándolo en la parte superior nunca dispara el evento.

 1
Author: Michael Granger,
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-07-13 14:01:17

Bootstrap 4:

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

Hide. bs. modal : Este evento se activa inmediatamente cuando se llama al método hide instance.

Hidden.bs.modal: Este evento se activa cuando el modal ha terminado de ocultarse al usuario (esperará a que se completen las transiciones CSS).

 1
Author: sendon1982,
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-03-24 04:44:34

Lo haría así:

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

El resto ya ha sido escrito por otros. También recomiendo leer la documentación: jquery-on method

 0
Author: tkartas,
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-07-27 12:43:12