2017-02-03 14 views
8

Tôi có biểu mẫu Rails Devise có xác thực javascript. Khi người dùng nhấn gửi, xác thực hoạt động và người dùng được tập trung lại vào biểu mẫu mà họ cần.Tắt dữ liệu Rails bằng nút bật lại

Tuy nhiên, đường ray sử dụng tính năng vô hiệu hóa dữ liệu để vô hiệu hóa nút sau khi được nhấp, vì vậy sau khi xác thực người dùng không thể nhấp gửi nữa. Tôi đang cố gắng thiết lập một số loại người nghe để kiểm tra thời điểm nút đã bị vô hiệu hóa, chờ một chút để tránh nhấp đúp, sau đó bật lại nút.

Tôi đã thử nhiều lần lặp mã, nhất là tôi đã cố gắng là:

 $(document.on("ajax:success", "new_supplier", function() { 
     var button; 

     button = $(this).find('.btn-sign-up'); 
     setTimeout((function() { return button.disabled=false; }),1); 


     }); 

Nhưng đã không thành công, trước đây tôi đã cố gắng chỉ cần thêm một người biết lắng nghe để nút:

 var button = document.getElementById('btn-sign-up'); 
     button.addEventListener("click", enableButton); 

     function enableButton() { 
      if (button.disabled) 
      { 
       window.setTimeout(enable(), 2000); 
      } 
     } 


     function enable() { 
      button.disabled=false; 
     } 

Nhưng điều này thất bại bởi vì nó chạy trước khi chức năng (ẩn trong rails ether) mà vô hiệu hoá các nút như vậy đã không làm việc.

nút của tôi gửi là một đơn giản:

<%= f.submit "Create my account", class: 'btn-sign-up', id: 'btn-sign-up' %> 

bất cứ ai có thể giúp tôi ra ở đây? Tôi nghĩ rằng nếu tôi có thể vô hiệu hóa các jQuery_ujs cho trang này sẽ làm việc, nhưng không chắc chắn nếu tôi có thể làm điều đó.

Trả lời

0

Tôi đã giải quyết được điều này khá đơn giản. Tôi chỉ đi vào và loại bỏ các dữ liệu disable-với từ nút với mã:

$('#my-button').removeAttr('data-disable-with'); 

Và sau đó tái lập các thuộc tính khi biểu mẫu đã sẵn sàng để trình ngăn nhấp chuột kép từ việc tạo bản sao.

+1

Đó có phải là Rails 5 rằng bổ sung này? Chỉ cần một giờ gỡ lỗi, "Ai đang thay đổi cái nút chết tiệt của tôi!" Làm thế nào thô lỗ của UJS. Điều này dường như thực hiện công việc. – Mike

+2

Thao tác trang sau khi tải bằng JS như một phương tiện để thực thi hành vi mặc định là một thực tế không tốt. – Archonic

28

Hành vi này đã được thay đổi trong Rails 5, hiện tại nó vô hiệu hóa các lần gửi theo mặc định.

Thay vì câu trả lời được chấp nhận, tôi sẽ đề nghị sử dụng các cấu hình sau:

config.action_view.automatically_disable_submit_tag = false 

hay, để làm điều đó ad-hoc cho các nút cụ thể, thêm video này vào nút gửi

data: { disable_with: false } 
+0

Nguồn: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag – mastaBlasta

Các vấn đề liên quan