Как предотвратить отправку формы Ajax

8

Приведенный ниже код блокирует отправку любой не-AJAX-формы.

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

В Drupal 8, как мы можем заблокировать отправку формы Ajax?

Ajax-формы не запускают обработчик отправки формы, и я не смог заблокировать событие click для кнопок отправки Ajaxified формы.

Для справки, я пытаюсь решить проблему № 3010084: отправка формы завершается до завершения загрузки файла

jrockowitz
источник

Ответы:

13

Я нашел решение здесь .

// 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
источник
Не могли бы вы расширить свое решение? Как вы реализуете этот код? Я знаю php и JS, но я не знаю, как AJAX работает в Drupal, так как я в основном занимаюсь интеграцией и тематикой.
Себастьян
Я использовал этот код в моем проекте, и он не работал. Затем я скопировал код из вашего патча drupal.org/files/issues/2018-11-19/2952233-5.patch, и он работает. Но я все еще заинтересован в объяснении, потому что я не уверен, что понимаю, что он делает.
Себастьян