如何防止Ajax表单提交


8

下面的代码阻止任何非ajax表单的提交。

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

在Drupal 8中,如何阻止Ajax表单提交?

Ajax表单不会触发表单提交处理程序,并且我无法阻止Ajaxified表单的提交按钮上的click事件。

供参考,我正在尝试解决问题#3010084:文件上传完成之前,表单提交完成了

Answers:


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复制了代码,它可以正常工作。但是我仍然对解释很感兴趣,因为我不确定它会做什么。
塞巴斯蒂安·吉凯尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.