web-dev-qa-db-ja.com

Ajaxフォームが送信されないようにする方法

以下のコードは、非ajaxフォームの送信をブロックします。

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

Drupal 8では、Ajaxフォームの送信をどのようにブロックできますか?

Ajaxフォームはフォーム送信ハンドラーをトリガーせず、Ajax化されたフォームの送信ボタンでクリックイベントをブロックできませんでした。

参考までに、修正を試みています 問題#3010084:ファイルのアップロードが完了する前にフォームの送信が完了します

8
jrockowitz

私は解決策を見つけました here

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