Cách ngăn chặn biểu mẫu Ajax gửi


8

Các mã dưới đây chặn bất kỳ hình thức không ajax gửi.

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

Trong Drupal 8, làm cách nào chúng ta có thể chặn biểu mẫu Ajax không được gửi?

Các biểu mẫu Ajax không kích hoạt trình xử lý gửi biểu mẫu và tôi không thể chặn sự kiện nhấp chuột trên các nút gửi biểu mẫu của Ajaxified.

Để tham khảo, tôi đang cố gắng khắc phục Sự cố # 3010084: Kết thúc gửi biểu mẫu trước khi hoàn tất tải lên tệp

Câu trả lời:


13

Tôi tìm thấy giải pháp ở đây .

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

Bạn có thể mở rộng về giải pháp của bạn? Làm thế nào để bạn thực hiện mã này? Tôi biết php và JS nhưng tôi không biết AJAX hoạt động như thế nào trong Drupal vì tôi chủ yếu tích hợp và theo chủ đề.
Sébastien Gicquel

Tôi đã sử dụng mã này trong projet của tôi và nó không hoạt động. Sau đó, tôi đã sao chép mã từ bản vá của bạn drupal.org/files/issues/2018-11-19/2952233-5.patch và nó hoạt động. Nhưng tôi vẫn quan tâm đến một lời giải thích vì tôi không chắc nó hiểu nó làm gì.
Sébastien Gicquel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.