2017-02-03 5 views
8

У меня есть форму Rails Devise, которая имеет проверку javascript. Когда пользователь нажимает кнопку «Отправить», валидация работает, и пользователь переориентируется на форму, в которой они должны быть.Rails data-disable-with re-enable button

Однако рельсы используют функцию отключения данных, чтобы отключить кнопку после ее нажатия, поэтому после проверки пользователь не может нажимать кнопку «Отправить». Я пытаюсь настроить своего слушателя, чтобы проверить, когда кнопка была отключена, подождите немного, чтобы предотвратить двойные щелчки, а затем снова включите кнопку.

Я пробовал много итераций кода, последний я попытался было:

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

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


     }); 

Но успеха не имел, ранее я попытался просто добавить слушателя к кнопке:

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

Но это не удалось, потому что он работал до функции (скрытой в rails ether), которая отключила кнопку, поэтому не работала.

кнопку Моя представить простой:

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

Может кто-нибудь помочь мне здесь? Я думаю, что если я могу отключить jQuery_ujs для этой страницы, которая будет работать, но не уверен, смогу ли я это сделать.

ответ

0

Мне удалось решить это довольно просто. Я просто пошел и удалил данные отключения из-за-с от кнопки с кодом:

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

, а затем повторно установить атрибут, когда форма была готова быть представлены, чтобы предотвратить двойные щелчки от создания дубликатов.

+1

Было ли Rails 5, который добавил это? Просто потратил час на отладку: «Кто, черт возьми, меняет мою проклятую кнопку отправки!» Как грубо UJS. Это, похоже, выполняет эту работу. – Mike

+2

Манипулирование страницей после загрузки с помощью JS в качестве средства для обеспечения поведения по умолчанию является плохой практикой. – Archonic

28

Это изменение было изменено в Rails 5, теперь оно отключает отправку по умолчанию.

Вместо принятого ответа, я бы предложил использовать следующую конфигурацию:

config.action_view.automatically_disable_submit_tag = false 

или сделать это Ad-Hoc для конкретных кнопок, добавьте эту кнопку отправки

data: { disable_with: false } 
+0

Источник: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag – mastaBlasta