2013-02-24 16 views
5

私はレールで自分のビューの1つに部分的な_formを持っています。それはそうのようになります。ドロップダウンメニューから選択した値に応じて、レール3のフォームの一部を非表示にする方法

<%= form_for(@project) do |f| %> 
    <div class="field"> 
    <%= f.label "Project Status" %><br /> 
    <%= f.select :status, ["In Progress", "Cancelled"] %> 
    </div> 

    <div class="field"> 
    <%= f.label "Capital Cost" %><br /> 
    <%= f.text_field :capital_cost %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

「進行中」のページをリロードすることなく、ドロップダウンメニューから選択されていない限り、私はグレー表示されるフォームの「資本コスト」の部分をしたいと思います。これは可能ですか?私はjavascriptを使ったいくつかのソリューションを見ましたが、私は完全な初心者であり、彼らの周りに頭を上げることができませんでした(残念ながら、私はこのプロジェクトを終了する前にjsを学ぶ時間がありません)。乾杯!

答えて

6

これはJavaScriptが必要です。 onchangeイベントハンドラを使用して、<select>入力の変更を監視します。入力値を比較し、#project_capital_cost入力のdisabled属性を条件付きで設定/設定解除します。このためにjQueryを使用することができます。

デフォルトでは、Rails 3はgemfileにjquery_railsの宝石を含めることでjQueryを有効にします。必要に応じて修正して、あなたの_form部分的に次のスクリプトを追加し、あなたのアプリとあなたの<select><input>タグに含まjquery_railsはそれぞれ#project_status#project_capital_cost IDを持っていと仮定:

<script> 
    $(document).ready(function(){ 
    if($('#project_status').val() != "In Progress"){ 
     $("#project_capital_cost").attr('disabled','disabled'); 
    } 
    else{ 
     $("#project_capital_cost").removeAttr('disabled'); 
    } 

    $('#project_status').change(function(){ 
     if($(this).val() != "In Progress"){ 
      $("#project_capital_cost").attr('disabled','disabled'); 
     } 
     else{ 
      $("#project_capital_cost").removeAttr('disabled'); 
     } 
    }) 
    }); 

</script> 

EDIT:

を非表示にするにはdivいくつか与える:

<div class="field" id="my_div"> 
    <%= f.label "Capital Cost" %><br /> 
    <%= f.text_field :capital_cost %> 
    </div> 

は次にスクリプトで$("#my_div").css('display','block')$("#my_div").css('display','none')

$("#project_capital_cost").removeAttr('disabled');

$("#project_capital_cost").attr('disabled','disabled');を交換してください。

+0

良い答えですが、無効にした属性を削除する方が無効にするよりも良いと思います。私はいくつかのブラウザでそれをfalseに設定することでいくつかの問題に遭遇したので、私はより安全な側でそれを削除したい。 :) –

+1

編集した 'removeAttr()'への回答です。存在する場合、属性を削除します。それ以外の場合は何も行われません。 – codeit

+0

乾杯!それを無効にする代わりに隠す方法はありますか? タグと