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


8

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

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

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

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

参考までに、問題#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を知っていますが、ほとんどが統合とテーマ設定をしているため、DrupalでAJAXがどのように機能するかわかりません。
セバスチャンジケル

私のプロジェクトでこのコードを使用しましたが、機能しませんでした。次に、パッチdrupal.org/files/issues/2018-11-19/2952233-5.patchからコードをコピーし、機能します。しかし、私はそれが何をするのか理解するのがわからないので、私はまだ説明に興味があります。
セバスチャンジケル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.