2017-02-03 12 views
8

私はJavascriptのバリデーションを持つRails Deviseフォームを持っています。ユーザーがsubmitを押すと、検証が機能し、ユーザーは必要なフォームに再フォーカスされます。Rails data-disable-with re-enablingボタン

しかし、レールはdata-disable-withを使用してボタンをクリックした後に無効にするので、検証後にユーザはもう送信をクリックできません。ボタンが無効になっているかどうかを確認するために何らかのリスナーを設定しようとしています。ダブルクリックを防ぐために少し待ってから、ボタンを再度有効にします。

私が試した最新だった、コードの多くの繰り返しを試してみました:

 $(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

は、これを追加5をレールましたか?ちょうど1時間をデバッグするのに費やした、「地獄が私の気になる送信ボタンを変えているのは誰ですか?」どのようにUJSの失礼な。これは仕事をしているようです。 – Mike

+2

デフォルトの動作を強制する手段としてJSをロードした後でページを操作することは悪いことです。 – Archonic

28

この動作はRails 5で変更されました。これはデフォルトではサブミットを無効にしています。

よりもむしろ受け入れ答え、私は次のような構成を使用することをお勧め:

config.action_view.automatically_disable_submit_tag = false 

をまたは、特定のボタンのためにそれをアドホックを行うには、送信ボタン

data: { disable_with: false } 
+0

ソース:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag – mastaBlasta

関連する問題