2013-01-18 12 views
8

Sto cercando di usare alertify.js come una finestra di dialogo di conferma per tutti i miei script di conferma. Ma semplicemente non funziona come fa il normale JS confirm. Nel codice qui sotto ho mai ottenere un return trueJavascript Alertify con ritorno da conferma

function aConf (mes) { 
    alertify.confirm(mes, function (e) { 
     return e; 
    }); 
} 

<a href="#" onclick="if(aConf(\'Are you sure you wish to remove this?\')) { function(); } return false;">Delete</a> 

Certo che se sostituisco aConf con JS' confirm funziona. Quindi, perché alertify non mi sta inviando il risultato?

risposta

9

Perché la conferma è una funzione di blocco (nessun javascript verrà eseguito fino a quando non restituisce vero/falso), e l'alertify è non bloccante (JS continua ad essere eseguito). Alertify non restituisce immediatamente un valore vero/falso, ma, probabilmente, restituisce immediatamente un valore non definito, quindi richiama una funzione di callback in un secondo momento, dopo che l'utente fa clic su OK o Annulla. Il valore di ritorno da tale funzione di callback non ha alcun effetto nell'esempio, perché il codice onclick ha già terminato l'esecuzione (perché non è bloccante).

si Supponendo che sta utilizzando questo: https://github.com/fabien-d/alertify.js/

Ecco come effettivamente funziona con una funzione di callback, non un valore di ritorno:

alertify.confirm(message, function (e) { 
    if (e) { 
     //after clicking OK 
    } else { 
     //after clicking Cancel 
    } 
}); 

Per il vostro codice di esempio, si potrebbe provare qualcosa di simile:

function performDelete (a_element) { 
    // perform your delete here 
    // a_element is the <a> tag that was clicked 
} 

function confirmAction (a_element, message, action) { 
    alertify.confirm(message, function(e) { 
     if (e) { 
      // a_element is the <a> tag that was clicked 
      if (action) { 
       action(a_element); 
      } 
     } 
    }); 
} 

<a href="#" onclick="confirmAction(this, 'Are you sure you wish to remove this?', performDelete); return false;">Delete</a> 

MODIFICA: aggiornato per essere una finestra di dialogo di conferma generica che richiama una funzione di richiamata se l'utente fa clic su OK.

+0

Questo è il problema. Non voglio fare una nuova funzione per ogni volta che la chiamo. Volevo avere una funzione generale da visualizzare e restituire. Grazie. – jfreak53

+0

Vuoi dire che vuoi che il link passi al suo href se l'utente fa clic su OK? o c'è qualche javascript che esegue l'azione se l'utente fa clic su OK? Vedi la mia risposta aggiornata. – Levi

+0

No, ma quello che hai postato sopra posso modificare ora per fare quello che mi serviva :) grazie. – jfreak53

Problemi correlati