2016-08-16 2 views
0

私はRailsの学習に時間を費やしていましたが、今私はデモプロジェクトに取り組んでいます。ケアリクエスト_フォームを即座にケアする必要があるかどうかを選択することです。ユーザが「false」を選択した場合、ユーザは、start_timeとstart_dateを渡す次の2つの隠しコード行から日時を選択するよう求められます。ユーザーが「true」を選択した場合、ユーザーがリクエスト_formの送信ボタンをクリックすると、Time.nowを使用してstart_timeフィールドとstart_dateフィールドの現在の時刻と現在の日付を取得します。私の質問は、ユーザーが「false」を選択するまで、最後の2つのフィールドを隠しておく適切な方法は何ですか? requests_form.html.erbユーザが特定のフィールドに準拠するアクションを選択するまで、特定のテキストフィールドを隠す方法

<div class="row"> 
    <div class="form-group"> 
    <%= f.check_box :immediate_care,{:checked => "checked"} %> Patient needs immediate care. 
    </div 
</div> 

<div class="row"> 
    <div class="form-group"> 
     <label>Choose your start date.</label> 
     <%= f.text_field :start_day, placeholder: "MM/DD/YY", class: "form control" %> 
     </div> 
</div> 

<div class="row"> 
    <div class="form-group"> 
     <label>Choose your start time.</label> 
     <%= f.text_field :start_time, placeholder: "08:00 AM", class: " form-control" %> 
     </div> 
</div>  
+2

まず、質問を1つの投稿ごとに1つの質問に限定してください。 「Time.now」は別の問題であり、別の質問で尋ねられるべきである。次に、ユーザーはどのようなコントロールを使用していますか?選択またはラジオボタンまたは何ですか? – MarsAtomic

+0

合意。この問題は、対処方法としてhttp://stackoverflow.com/questions/38960667/how-to-get-the-current-date-and-time-after-a-user-select-actionで生成されたことに注意してください最初の質問は別の質問としてここに。 2番目の質問は、その他の質問に取り組むことができます。 – jaydel

+0

ありがとう、私に知らせるための@MarsAtomicとjaydelに感謝します。私はStackOverFlowを初めて使っていて、まだルールに適応しています。私は今私の質問に適切な調整を加えました。 –

答えて

0

これは非常に簡単な解決策です。基本的な考え方は、オプションで表示される入力フィールドを1つのdiv内にラップすることです。あなたはそれぞれのdivを表示したり隠したりするCSSクラスをいくつか定義しました。 javascript関数をselectイベントのclickイベントにバインドすると、select:optionの値に応じてCSSクラスをオプションのdivに追加して削除します。

HTML:

<select id='my_select'>Do you want Immediate Care? 
    <option value='yes'>Yes</option> 
    <option value='no'>No</option> 
</select> 

<div class='reveal' id='date_fields'> 
    ... in here you put the fields you want to hide and show ... 
</div> 

Javascriptを:

$document.ready(function() { 
    $('#my_select').bind('click', function() { 
    selected_option = $('#my_select option:selected'); 
    if $(selected_option).val() == 'yes' { 
     $('#date_fields').addClass('reveal'); 
     $('#date_fields').removeClass('hide'); 
    } else { 
     $('#date_fields').addClass('hide'); 
     $('#date_fields').removeClass('reveal'); 
    } 
    }); 
}); 

そして最後に、CSS:

.reveal { 
    display: block; 
} 

.hide { 
    display: none; 
} 

私は率直な場所で、私の構文が無効であるかもしれないことを認めます。 Railsの開発者として私はCoffeescriptとSASSを使用することを選んだので、JavascriptとSASSの構文スキルは過去5年間で少し萎縮しています。問題を指摘したり修正プログラムを編集したりしてください。

これにはいくつかの注意点があります。 divsはデフォルトでdisplay:blockになっているので、表示するように変更する単一のCSSクラスを使うことができます:noneそしてclickハンドラにそのクラスを単純に追加して削除させます。私は私の例をより明示的にして、ロジックに従う方が簡単です。

また、誤ってクリックを拘束している可能性があります。この例でも、私が取るべき問題に対する一般的なアプローチを示しています。

0

は、オプションのフィールドラッパーのクラスを追加します。

<div class="row optional"> 

は、このスクリプトを追加します。

<script> 
    $('#patient_immediate_care').change(function() { 
     if($(this).is(":checked")) { 
     $('.optional').hide(); 
     } 
     else { 
     $('.optional').show(); 
     } 
    } 

); 
    $(function() { 
     if($('#name_immediate_care').is(":checked")) { 
     $('.optional').hide(); 
     } 
     else { 
     $('.optional').show(); 
     } 
    }); 
</script> 

とCSS:ヨールフォーム要素の

<style> 
    .optional { 
     display: none; 
    } 
</style> 

チェックidを。それはform_forに依存します。患者は例えばです。

+0

これは機能します!しかし、チェックを外してチェックボックスをオンにしたときだけです。また、ページを更新すると、フィールドが再び表示されます。 - –

+0

デフォルト値がチェックされ、更新後にオプションのフィールドを表示/非表示にするスクリプトを追加するため、フィールドを非表示にするように編集しました。 –

関連する問題