jquery-ui-dialog - Cómo enganchar en el diálogo cerrar evento


Estoy utilizando el jquery-ui-dialog plugin

Estoy buscando la manera de actualizar la página cuando en algunas circunstancias cuando el diálogo está cerrado.

¿Hay alguna forma de capturar un evento de cierre desde el diálogo?

Sé que puedo ejecutar código cuando se hace clic en el botón cerrar, pero eso no cubre el cierre del usuario con escape o la x en la esquina superior derecha.

Author: Rahul Gupta, 2008-10-05

10 answers

Lo he encontrado!

Puede capturar el evento close usando el siguiente código:

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });

Obviamente puedo reemplazar la alerta con lo que tenga que hacer.
Edit: A partir de Jquery 1.7, bind () se ha convertido en on()

 234
Author: Brownie,
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-05-31 20:20:33

Creo que también puedes hacerlo mientras creas el diálogo (copiado de un proyecto que hice):

dialog = $('#dialog').dialog({
    modal: true,
    autoOpen: false,
    width: 700,
    height: 500,
    minWidth: 700,
    minHeight: 500,
    position: ["center", 200],
    close: CloseFunction,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});

Nota close: CloseFunction

 176
Author: Darryl Hein,
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-28 14:35:57
$("#dialog").dialog({
autoOpen: false,
resizable: false,
width: 400,
height: 140,
modal: true, 
buttons: {
  "SUBMIT": function() { 
    $("form").submit();
  }, 
  "CANCEL": function() { 
    $(this).dialog("close");
  } 
},
**close: function() {
  alert('close');
}**
});
 31
Author: Mo Ming C,
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
2011-03-03 19:18:56
$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

La propiedad"close" de dialog da el evento close para el mismo.

 18
Author: Taksh,
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-07-17 08:43:59

También puedes probar esto

$("#dialog").dialog({
            autoOpen: false,
            resizable: true,
            height: 400,
            width: 150,
            position: 'center',
            title: 'Term Sheet',
            beforeClose: function(event, ui) { 
               console.log('Event Fire');
            },
            modal: true,
            buttons: {
                "Submit": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
 14
Author: Umair Noor,
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
2012-06-20 09:45:16

Esto es lo que funcionó para mí...

$('#dialog').live("dialogclose", function(){
   //code to run on dialog close
});
 10
Author: morttan,
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
2011-07-19 17:59:36

A partir de jQuery 1.7, el .el método on () es el método preferido para adjuntar controladores de eventos a un documento.

Porque nadie realmente creó una respuesta usando.on() en lugar de bind() decidí crear uno.

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});
 8
Author: Disper,
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-11-10 08:07:26

Si estoy entendiendo el tipo de ventana del que estás hablando, no $(ventana).unload () (para la ventana de diálogo) ¿te da el gancho que necesitas?

(Y si malinterpreté, y estás hablando de un cuadro de diálogo hecho a través de CSS en lugar de una ventana emergente del navegador, entonces todas las formas de cerrar esa ventana son elementos para los que podrías registrar controladores de clics.)

Editar: Ah, ahora veo que estás hablando de jquery-ui diálogos, que se hacen a través de CSS. Usted puede enganchar el X que cierra la ventana registrando un controlador de clics para el elemento con la clase ui-dialog-titlebar-close.

Más útil, tal vez, es que le diga cómo averiguar eso rápidamente. Mientras se muestra el diálogo, simplemente abra FireBug y Inspeccione los elementos que pueden cerrar la ventana. Verá instantáneamente cómo se definen y eso le da lo que necesita para registrar los controladores de clics.

Así que para responder directamente a su pregunta, Creo que la respuesta es realmente " no " there no hay un evento de cierre que pueda enganchar, pero "sí" can puede enganchar todas las formas de cerrar el cuadro de diálogo con bastante facilidad y obtener lo que desea.

 4
Author: andy,
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
2008-10-05 13:26:10

Agregue la opción 'cerrar' como en muestra y haga lo que quiera función en línea

close: function(e){
    //do something
}
 4
Author: Mehdi Roostaeian,
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-24 10:57:37

Puede intentar el siguiente código para capturar el evento de cierre de cualquier elemento: página, diálogo, etc.

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});
 2
Author: Alexei,
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
2012-02-15 14:41:33