2010-10-07 14 views
6


Al punto, voglio ignorare la funzione standard js confirm() all'interno di un plug-in jQuery. Ho capito come farlo con il semplice layout delle funzioni qui sotto.Ignora Javascript Conferma() mantenendo la richiamata

function confirm(opts) { 
    //code 
} 

Ora, quello che voglio fare è chiamare un'altra funzione all'interno della funzione confirm sopra, in questo modo ...

La funzione openModal si aprirà una finestra modale personalizzato con il messaggio e ha richiesto pulsanti. I pulsanti sono entrambi <span> con di submit o cancel. submit restituisce true e cancel restituisce false. Ma ora, come posso restituire true o false in base al pulsante su cui si fa clic?

Per esempio ...

$('#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> 
}); 

Spero che capirete cosa intendo.

risposta

12

Questo è possibile ma non esattamente come descritto. Il tipico modo viene utilizzata la funzione di conferma è:

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

Nell'esempio precedente, il pulsante viene restituito in modo sincrono allo script. L'esecuzione è sospesa all'interno della funzione finché non viene premuto un pulsante.

Una "finestra di dialogo modale" è solo una sovrapposizione su tutto il contenuto di una pagina Web HTML. Per il browser, i pulsanti all'interno di tale overlay funzionano allo stesso modo dei pulsanti in qualsiasi altro punto all'interno di quella pagina.

Poiché JavaScript gestisce tale clic del pulsante in modo asincrono (ovvero utilizzando le funzioni di callback per gestire gli eventi) anziché in modo sincrono, l'approccio che si sta tentando non funzionerà.

Si avrebbe bisogno di cambiare tutte le parti del codice che utilizzano la funzione di conferma per assomigliare a questo:

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

Questo potrebbe funzionare altrettanto registrazione di un gestore di eventi con jQuery sé. L'esecuzione dello script continua immediatamente, saltando oltre tutto il codice nella funzione anonima. Successivamente, il browser chiamerà quella funzione indirettamente tramite un gestore di eventi JavaScript che si registra all'interno della funzione di conferma, il suo scopo è chiamare la funzione di callback con true o false come appropriato.

+2

+1 Trovo triste che il modo originale, davvero modale di 'confirm()' non è possibile imitare, ma è il modo in cui è –