So verhindern Sie, dass ein Ajax-Formular gesendet wird

8

Der folgende Code verhindert das Senden von Nicht-Ajax-Formularen.

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

Wie können wir in Drupal 8 verhindern, dass ein Ajax-Formular gesendet wird?

Ajax-Formulare lösen keinen Formularübermittlungs-Handler aus, und ich konnte das Klickereignis auf den Übermittlungsschaltflächen eines Ajaxified-Formulars nicht blockieren.

Als Referenz versuche ich, das Problem Nr. 3010084 zu beheben : Das Senden des Formulars ist abgeschlossen, bevor der Datei-Upload abgeschlossen ist

jrockowitz
quelle

Antworten:

13

Ich habe hier die Lösung gefunden .

// 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();
  };
}
jrockowitz
quelle
Könnten Sie Ihre Lösung erweitern? Wie implementieren Sie diesen Code? Ich kenne PHP und JS, aber ich weiß nicht, wie AJAX in Drupal funktioniert, da ich hauptsächlich Integration und Theming mache.
Sébastien Gicquel
Ich habe diesen Code in meinem Projekt verwendet und es hat nicht funktioniert. Dann habe ich den Code von Ihrem Patch drupal.org/files/issues/2018-11-19/2952233-5.patch kopiert und es funktioniert. Aber ich bin immer noch an einer Erklärung interessiert, weil ich nicht sicher bin, was sie bewirkt.
Sébastien Gicquel