Bagaimana mencegah pengiriman formulir Ajax

8

Kode di bawah ini memblokir segala bentuk non-ajax dari pengiriman.

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

Di Drupal 8, bagaimana kita bisa memblokir formulir Ajax agar tidak dikirimkan?

Formulir Ajax tidak memicu pengendali pengiriman formulir dan saya belum dapat memblokir acara klik pada tombol kirim formulir Ajaxified.

Untuk referensi, saya mencoba untuk memperbaiki Masalah # 3010084: Pengiriman formulir selesai sebelum unggahan file selesai

jrockowitz
sumber

Jawaban:

13

Saya menemukan solusinya di sini .

// 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();
  };
}
jrockowitz
sumber
Bisakah Anda mengembangkan solusi Anda? Bagaimana Anda menerapkan kode ini? Saya tahu php dan JS tapi saya tidak tahu bagaimana AJAX bekerja di Drupal karena saya kebanyakan melakukan integrasi dan theming.
Sébastien Gicquel
Saya telah menggunakan kode ini di projet saya dan tidak berfungsi. Kemudian, saya telah menyalin kode dari tambalan Anda drupal.org/files/issues/2018-11-19/2952233-5.patch dan berfungsi. Tetapi saya masih tertarik pada penjelasan karena saya tidak yakin untuk mengerti apa artinya.
Sébastien Gicquel