Domanda


Al punto, voglio ignorare la funzione js confirm() standard all'interno di un plugin per jQuery. Ho capito come si fa con il layout semplice funzione qui sotto.

function confirm(opts) {
   //code
}

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

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

La funzione openModal si aprirà una finestra modale personalizzato con i pulsanti necessari messaggio e. I pulsanti sono entrambi <span> con la id di una submit o cancel. submit ritorna ritorna veri e cancel falsa. Ma ora, come faccio a restituire true o false in base al tasto cliccato?

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.

È stato utile?

Soluzione

Questo è possibile ma non esattamente come si descrive. 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 è in pausa all'interno della funzione fino a quando si preme un pulsante.

Una "finestra di dialogo modale" è solo un overlay sopra l'intero contenuto di una pagina web HTML. Per il browser, i pulsanti all'interno di un tale lavoro di sovrapposizione nello stesso modo come i pulsanti in qualsiasi altro luogo all'interno di quella pagina fanno.

Dato che gestisce JavaScript tali clic sul pulsante in modo asincrono (vale a dire utilizzando le funzioni di callback per gestire gli eventi), piuttosto che 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 passato tutto il codice nella funzione anonima. Più tardi, il browser chiamare tale funzione indirettamente attraverso un gestore di eventi JavaScript che si registra all'interno della funzione di conferma, il suo scopo per chiamare la funzione di callback sia con true o false a seconda dei casi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top