Come impedire l'invio di un modulo Ajax


8

Il codice seguente impedisce l'invio di qualsiasi modulo non Ajax.

$(this.form)
  .on('submit', function(event) {
    if (/* Some condition */) {
      event.preventDefault();
    }
  });

In Drupal 8, come possiamo bloccare l'invio di un modulo Ajax?

I moduli Ajax non attivano un gestore di invio moduli e non sono stato in grado di bloccare l'evento click sui pulsanti di invio di un modulo Ajaxified.

Per riferimento, sto cercando di risolvere il problema n. 3010084: l'invio del modulo termina prima del completamento del caricamento del file

Risposte:


13

Ho trovato la soluzione qui .

// Add submit handler to form.beforeSend.
// Update Drupal.Ajax.prototype.beforeSend only once.
if (typeof Drupal.Ajax !== 'undefined' && typeof Drupal.Ajax.prototype.beforeSubmitOriginal === 'undefined') {
  Drupal.Ajax.prototype.beforeSubmitOriginal = Drupal.Ajax.prototype.beforeSubmit;
  Drupal.Ajax.prototype.beforeSubmit = function (form_values, element_settings, options) {
    if (/* Custom condition */) {
      this.ajaxing = false;
      return false;
    }
    return this.beforeSubmitOriginal();
  };
}

Potresti espandere la tua soluzione? Come si implementa questo codice? Conosco php e JS ma non so come AJAX stia lavorando in Drupal, dato che faccio principalmente integrazione e temi.
Sébastien Gicquel,

Ho usato questo codice nel mio progetto e non ha funzionato. Quindi, ho copiato il codice dalla tua patch drupal.org/files/issues/2018-11-19/2952233-5.patch e funziona. Ma sono ancora interessato a una spiegazione perché non sono sicuro di capire cosa fa.
Sébastien Gicquel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.