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


8

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

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

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

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

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

Ответы:


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

Не могли бы вы расширить свое решение? Как вы реализуете этот код? Я знаю php и JS, но я не знаю, как AJAX работает в Drupal, так как я в основном занимаюсь интеграцией и тематикой.
Себастьян

Я использовал этот код в моем проекте, и он не работал. Затем я скопировал код из вашего патча drupal.org/files/issues/2018-11-19/2952233-5.patch, и он работает. Но я все еще заинтересован в объяснении, потому что я не уверен, что понимаю, что он делает.
Себастьян
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.