Sulla scia ap revious question in cui ho chiesto di disattivazione di un pulsante di invio fino a quando tutte le chiamate Ajax hanno finito di tornare ...Come si impedisce l'invio del modulo fino al completamento di più chiamate Ajax? jquery
Sembra che le persone sono ancora riuscendo a inviare il modulo, anche con il tasto disattivato e un segnale di avvertimento . Immagino che potrebbe essere da premere 'invio' in un inserimento di testo.
Come si disabilita l'intero modulo anziché il pulsante di invio?
Il codice finora è:
// if we're waiting for any ajax to complete we need to disable the submit
$(document).ajaxStart(function() {
$(".ajaxbutton").attr("disabled", "disabled");
// if it's taken longer than 250ms display waiting message
timer = setTimeout(function() {
$('#processingAlert').html(' ...please wait one moment');
$('#processingAlert').show();
}, 250);
})
$(document).ajaxComplete(function() {
$(".ajaxbutton").removeAttr("disabled");
$('#processingAlert').hide();
// cancel showing the message when the ajax call completes.
clearTimeout(timer);
});
Un altra cosa che vorrei menzionare che potrebbe essere la causa del problema è che ci sono più chiamate AJAX accadendo allo stesso tempo, ad esempio un div riceve ingressi nascosti e un altro div in un'altra pagina mostra per esempio un prezzo totale.
Il fatto che alcune chiamate ajax si stiano completando rapidamente annullerebbe l'effetto disabilitante di ajaxStart? Ad esempio, ajax call1 e ajax call2 sparano entrambi a ajaxStart - call1 termina molto velocemente, riattiverebbe il modulo mentre attendiamo il completamento di call2?
C'è un modo migliore per farlo in cui potremmo semplicemente verificare se TUTTE le chiamate ajax sono state completate?
questo suona nella giusta direzione, dal manuale:. $ ("forma") presenta (function() { if ($ ("Ingresso: prima"). Val() == "corretto") { $ ("span"). Text ("Validated ..."). Show(); return true; } $ ("span"). Text ("Non valido!"). Show(). fadeOut (1000); return false; }); Quindi, se controllo che tutte le chiamate ajax siano completate, posso restituire true. Sto usando PHP quindi, non posso usare le funzioni ASP purtroppo. – Ashley
PS Qualcuno può farmi sapere come inserire il codice formattato in un commento, mi sembra sempre di ottenere tutto schiacciato su una riga – Ashley
Non penso che sia possibile formattare il codice nei commenti. Vorrei andare avanti ed estendere la tua domanda con commenti aggiuntivi. –