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.

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.