以下のコードは、非ajaxフォームの送信をブロックします。
$(this.form)
.on('submit', function(event) {
if (/* Some condition */) {
event.preventDefault();
}
});
Drupal 8では、Ajaxフォームの送信をどのようにブロックできますか?
Ajaxフォームはフォーム送信ハンドラーをトリガーせず、Ajax化されたフォームの送信ボタンでクリックイベントをブロックできませんでした。
参考までに、修正を試みています 問題#3010084:ファイルのアップロードが完了する前にフォームの送信が完了します
私は解決策を見つけました 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();
};
}