2017-02-03 26 views
8

Mam formularz Rails Devise, który ma sprawdzanie poprawności javascript. Gdy użytkownik naciśnie przycisk, funkcja sprawdzania poprawności działa, a użytkownik jest ponownie skupiony na formularzu, w którym musi być.Wyłączenie danych z szynami za pomocą przycisku ponownego włączania

Jednak szyny używają opcji wyłączania danych, aby wyłączyć przycisk po kliknięciu, więc po sprawdzeniu poprawności użytkownik nie może już klikać przycisku przesyłania. Próbuję skonfigurować słuchacza do sprawdzania, kiedy przycisk został wyłączony, odczekać chwilę, aby zapobiec podwójnemu kliknięciu, a następnie ponownie włączyć przycisk.

Próbowałem wielu iteracji kodu, najnowsza Próbowałem było:

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

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


     }); 

Ale nie miał sukcesów, wcześniej próbowałem tylko dodawanie słuchacza do przycisku:

 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; 
     } 

Ale to nie powiodło się, ponieważ działało przed funkcją (ukrytą w szynie ether), która wyłączała przycisk, więc nie działała.

przycisk Mój przedstawienia jest prosta:

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

Czy ktoś może mi pomóc tutaj? Myślę, że jeśli mogę wyłączyć jQuery_ujs dla tej strony, która zadziała, ale nie jestem pewien, czy mogę to zrobić.

Odpowiedz

0

Udało mi się to rozwiązać w prosty sposób. Właśnie wszedł i usunięte dane z-disable-z przycisku z kodem:

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

i ponowne ustanowienie atrybut, gdy formularz jest gotowy do przedłożenia zapobiec podwójne kliknięcia od tworzenia duplikatów.

+1

Czy on Rails 5, który dodał ten? Spędziłem godzinę na debugowaniu: "Kto do diabła zmienia mój przycisk cholernego wysyłania!" Jak niegrzecznie z UJS. Wydaje się, że wykonuje to zadanie. – Mike

+2

Manipulowanie stroną po załadowaniu za pomocą JS jako sposobu wymuszania domyślnego zachowania jest złą praktyką. – Archonic

28

To zachowanie zostało zmienione w Railsach 5, teraz domyślnie wyłącza przesyłanie.

Zamiast akceptowanej odpowiedzi, proponuję użyć następującej konfiguracji:

config.action_view.automatically_disable_submit_tag = false 

lub zrobić to ad-hoc dla poszczególnych przycisków, dodać to do przycisku Prześlij

data: { disable_with: false } 
+0

Źródło: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag – mastaBlasta