Anulando Javascript Confirmar (), mientras que la preservación de la devolución de llamada

StackOverflow https://stackoverflow.com/questions/3886228

Pregunta


Hasta el punto, quiero reemplazar la función js confirm() estándar dentro de un plugin de jQuery. He descubierto la manera de hacerlo con el diseño simple función a continuación.

function confirm(opts) {
   //code
}

Ahora, lo que quiero hacer es llamar a otra función dentro de la función confirm anteriores del siguiente modo ...

function confirm(opts) {
   openModal(opts);
}

La función openModal se abrirá una ventana modal personalizada con el mensaje y botones necesarios. Los botones son tanto <span> con el id de cualquiera submit o cancel. submit vuelve retornos verdaderos y falsos cancel. Pero ahora, ¿cómo puedo devolver verdadero o falso basado en el botón de clic?

Por ejemplo ...

$('#openModal').live('click', function() {
   var opts = { title:'Modal Title', message:'This is a modal!' };
   var resp = confirm(opts);
   if(resp) 
      // user clicked <span id="submit"></span>
   else 
      // user clicked <span id="cancel"></span>
});

Esperamos que usted entienda lo que quiero decir.

¿Fue útil?

Solución

Este es posible, pero no exactamente como se describe. La forma típica se utiliza la función de confirmar es:

if(confirm("Are you sure you want to submit this form?")) {
    form.submit();
}

En el ejemplo anterior, el botón de prensa se devuelve de forma sincronizada con el guión. La ejecución se detuvo dentro de la función hasta que se presiona un botón.

Un "diálogo modal" es sólo una superposición sobre todo el contenido de una página web HTML. Para el navegador, botones dentro de una obra tan superposición de la misma forma que los botones en cualquier otro lugar dentro de esa página lo hacen.

Desde JavaScript acepte este tipo de clics de los botones de forma asíncrona (es decir, el uso de las funciones de devolución de llamada para controlar los eventos) en lugar de forma sincrónica, el enfoque que están intentando no funcionará.

tendría que cambiar todas las partes del código que utilizan la función de confirmación para tener este aspecto:

confirm("Are you sure you want to submit this form?", function(result) {
    if(result) {
        form.submit();
    }
});

Esto funcionaría igual de registrar un controlador de eventos con jQuery sí lo hace. continúa la ejecución del script de inmediato, sin esperar más allá de todo el código de la función anónima. Más tarde, el navegador va a llamar a esa función indirectamente a través de un controlador de eventos de JavaScript que se inscribe dentro de la función de confirmación, su propósito de llamar a la función de devolución de llamada, ya sea con o true false según el caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top