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

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();
  };
}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.