Comment empêcher la soumission d'un formulaire Ajax

8

Le code ci-dessous bloque la soumission de tout formulaire non ajax.

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

Dans Drupal 8, comment pouvons-nous empêcher la soumission d'un formulaire Ajax?

Les formulaires Ajax ne déclenchent pas de gestionnaire de soumission de formulaire et je n'ai pas pu bloquer l'événement de clic sur les boutons de soumission d'un formulaire Ajaxified.

Pour référence, j'essaie de résoudre le problème n ° 3010084: la soumission du formulaire se termine avant le téléchargement du fichier.

jrockowitz
la source

Réponses:

13

J'ai trouvé la solution ici .

// 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
la source
Pourriez-vous développer votre solution? Comment implémentez-vous ce code? Je connais php et JS mais je ne sais pas comment AJAX fonctionne dans Drupal car je fais principalement de l'intégration et du thème.
Sébastien Gicquel
J'ai utilisé ce code dans mon projet et cela n'a pas fonctionné. Ensuite, j'ai copié le code de votre patch drupal.org/files/issues/2018-11-19/2952233-5.patch et cela fonctionne. Mais je suis toujours intéressé par une explication parce que je ne suis pas sûr de comprendre ce qu'il fait.
Sébastien Gicquel