2010-10-07 31 views
6


Hasta el punto, quiero anular la función estándar js confirm() dentro de un plugin jQuery. He descubierto cómo hacerlo con el diseño de la función simple a continuación.Reemplazar Javascript Confirmar() mientras conserva la devolución de llamada

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 ...

La función openModal se abrirá una ventana modal personalizada con el mensaje y requiere botones. Los botones son ambos <span> con id de submit o cancel. submit devuelve verdadero y cancel devuelve falso. Pero ahora, ¿cómo devuelvo verdadero o falso en función del botón presionado?

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> 
}); 

Esperemos que entienden lo que quiero decir.

Respuesta

12

Esto es posible pero no exactamente como usted lo 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 pausa dentro de la función hasta que se presione un botón.

Un "diálogo modal" es solo una superposición sobre todo el contenido de una página web HTML. Para el navegador, los botones dentro de dicha superposición funcionan de la misma manera que los botones en cualquier otro lugar dentro de esa página.

Dado que JavaScript maneja dichos clics de botón de forma asincrónica (es decir, que usa funciones de devolución de llamada para manejar eventos) en lugar de sincrónicamente, el enfoque que está intentando no funcionará.

Usted 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. La ejecución del script continúa de inmediato, omitiendo todo el código en la función anónima. Más tarde, el navegador llamará a esa función indirectamente a través de un controlador de eventos JavaScript que usted registre dentro de la función de confirmación, con el propósito de llamar a la función de devolución de llamada ya sea con true o false según corresponda.

+2

+1 Me parece triste que la forma original, realmente modal de 'confirm()' no sea posible de imitar, pero es la forma en que es –

Cuestiones relacionadas