Como impedir que um formulário Ajax seja enviado

8

O código abaixo bloqueia o envio de qualquer formulário não-ajax.

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

No Drupal 8, como podemos bloquear o envio de um formulário Ajax?

Os formulários Ajax não acionam um manipulador de envio de formulários e não consegui bloquear o evento click nos botões de envio de um formulário Ajaxified.

Para referência, estou tentando corrigir o problema nº 3010084: o envio do formulário é concluído antes da conclusão do upload do arquivo

jrockowitz
fonte

Respostas:

13

Encontrei a solução aqui .

// 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
fonte
Você poderia expandir sua solução? Como você implementa esse código? Eu sei php e JS, mas não sei como o AJAX está funcionando no Drupal, já que faço principalmente integração e temas.
Sébastien Gicquel
Eu usei esse código no meu projeto e não funcionou. Em seguida, copiei o código do seu patch drupal.org/files/issues/2018-11-19/2952233-5.patch e ele funciona. Mas ainda estou interessado em uma explicação, porque não tenho certeza de entender o que ela faz.
Sébastien Gicquel