2010-01-10 33 views
5

Estoy usando SimpleModal (http://www.ericmmartin.com/projects/simplemodal/) y tengo un formulario que se muestra en un cuadro de diálogo. Lo que quiero hacer es poder tener una confirmación cada vez que el usuario intente cerrar el diálogo (ya sea por escape o haciendo clic en el ícono de cerrar) y les pregunte si realmente quieren cerrarlo sin guardar los datos del formulario . He intentado lo siguiente:SimpleModal confirmar antes de cerrar el cuadro de diálogo

onClose: function (dialog) { 
    if (confirm('Are you sure you want to close without saving?')) { 
     $.modal.close(); 
    } 
} 

Pero sólo se dispara una vez. Si presiona cancelar, no cierra más tarde, lo cual tiene sentido. ¿Alguien tiene una sugerencia o solución? Cualquier ayuda sería muy apreciada. :)

Respuesta

8

Miré la fuente de SimpleModal para usted y lo que quiere hacer no se puede hacer con su código. Esta es la razón:

Justo antes de llamar a su devolución de llamada personalizados onClose se llama a esto:

s.unbindEvents(); 

lo que efectivamente dice "Este cuadro se va a cerrar, le guste o no". No es como una devolución de llamada normal que puede cancelar.

Recomendaría utilizar el jQuery UI Dialog, que debería encontrar muy fácil de implementar esa funcionalidad mediante el uso de su devolución de llamada beforeclose. Sólo tendría que utilizar:

beforeclose: function(){ 
    return confirm('Are you sure you want to close without saving?') 
} 
+0

Gracias por señalarme Doug :) Mirando más en él He podido modificar el código para lograr lo que quería –

+0

@Zoic Ya, es probable que pueda editar su complemento, pero luego cualquier actualización siempre tienes que volver a aplicar tus cambios. ¡Me alegra que lo hayas hecho funcionar! Si esta respuesta te ayudó, asegúrate de marcarla como aceptada. –

+0

en al menos ff38.0.5 es sensible a las mayúsculas y minúsculas, beforeClose, de lo contrario, esto funcionó para mí, gracias – Aba

0

También he mirado en la fuente y cuando se ejecuta el evento onclosed una bandera occb está habilitada.

Lo que se puede tratar (no he probado) es anular este occb como se le pasa a la variable this:

onClose: function (dialog) { 
    if (confirm('Are you sure you want to close without saving?')) { 
     $.modal.close(); 
    }else{ 
     this.occb = false; 
    } 
} 

Espero que esto ayude.

4

Tengo este tipo de trabajo utilizando Jerone de lo que estaba tratando, sino también volver a vincular los acontecimientos:

onClose: function (dialog) { 
    if (confirm('Are you sure you want to close without saving?')) { 
     $.modal.close(); 
    }else{ 
     this.occb = false; 
     this.bindEvents(); 
    } 
} 

Este plugin necesita ser actualizado para soportar el cancelar el evento de cierre. Parece que en realidad no se lo considera un evento en el código. Me gustaría que se comporte como cualquier otro evento js.

Cuestiones relacionadas