2016-04-15 8 views
0

これはよくある質問ですが、検索して見つけられません。私は<div class"xyz" style= "display:none"を作成しました。私が提出するフォームは、私のビューのコントローラのインデックスの取得リクエストです。私はフォームの提出でjavascriptを実行しても問題はありませんが、ページのリロード後にjavascriptを実行したいので、divを再表示することができます。これは遠隔のajax形式ではないことに注意してください。Rails 5フォームを送信した後、ページの読み込み時にjavacriptを実行します。

index.html.erb:

<div class="six wide column" > 
    <div id="clients_piece_tab_container" style="display: none;"> 
    <%= render :partial => 'client_piece_tab'%> 
    </div> 
</div> 

私のフォームはform_tag

を使用してインデックスに提出index.html.erb:ここで私はページを再読み込みした後に再表示することを隠されているdivがあります
<%= form_tag('clients', action: :index, method: :get) do%> 
    <%= render :partial => 'update_available'%> # <--Not the div/partial Im trying to unhide. 
    <br/> 
    <div class="four wide column"> <%=submit_tag "Get Clients", class: "ui primary button"%></div> 
<%end%> 

私が知っていると思うのは、get要求が完了した後でindex.js.coffeeを起動できるはずだということです。しかし、私は1の0引数に関するエラーが発生して次のことを試してみた:

Railsでは

clients_controller.rb

respond_to do |format| 
    format.js {} 
end 
+0

はあなたですJQueryを使用するか、または単純なJSを使用しますか? – erapert

+0

Jqueryが動作する場合はJSを使用しても構いません – ctilley79

+0

ちなみに、コントローラでは、{}をこの場合括弧で囲む必要があると思います: 'format.js({}) – erapert

答えて

0

普通としてビューで応答します。そのビュー内

はこのどこかに置く:

<script> 
    // rails should fill in form_submitted to true or false... 
    var form_was_submitted = <% form_submitted %>; 
    // idiomatic jquery for running on page load 
    $(function() { 
     if (form_was_submitted) { 
      console.log ('this runs on page load'); 
     } 
    }); 
</script> 

あなたはjqueryのせずに行いたい場合は、see this SO answer

それが使用するAJAXかもしれ行う別の方法:

<script> 
    $('#clients').on ('submit', function (event) { 
     // this runs when the user submits the form 

     // prevents the form from actually reloading the page 
     event.preventDefault(); 

     // ajax requests are async 
     $.ajax ({ 
      url: '/path/to/index', 
      method: 'GET', 
      data: { something: 'something' } 
     }).success (function (server_response) { 
      // this function runs after the ajax request completes 
      console.log ('server responded with ', server_response); 
      // show the div 
      $('#clients_piece_tab_container').show(); 
     }); 
    }); 
</script> 
+0

これは問題ですページに移動してもコードが実行されます。フォームを送信した後にロードするだけです。 – ctilley79

+0

次にAJAXのアプローチを使用することをお勧めします。 – erapert

+0

別の方法がある必要があります – ctilley79

関連する問題