Cómo evitar que se envíe un formulario Ajax

8

El siguiente código bloquea el envío de cualquier formulario que no sea ajax.

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

En Drupal 8, ¿cómo podemos bloquear el envío de un formulario Ajax?

Los formularios Ajax no activan un controlador de envío de formularios y no he podido bloquear el evento de clic en los botones de envío de un formulario Ajaxified.

Como referencia, estoy tratando de solucionar el problema # 3010084: el envío del formulario finaliza antes de que se complete la carga del archivo

jrockowitz
fuente

Respuestas:

13

Encontré la solución aquí .

// 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
fuente
¿Podría ampliar su solución? ¿Cómo implementas este código? Sé php y JS, pero no sé cómo está funcionando AJAX en Drupal, ya que principalmente hago integración y temas.
Sébastien Gicquel
He usado este código en mi proyecto y no funcionó. Luego, he copiado el código de su parche drupal.org/files/issues/2018-11-19/2952233-5.patch y funciona. Pero todavía estoy interesado en una explicación porque no estoy seguro de entender lo que hace.
Sébastien Gicquel