1

Rails 3.2アプリケーションのUser DOBフィールドでjquery-ui datepickerを使用しています。jquery-ui datepickerの最大/最小範囲を正しく設定し、デフォルトをRails列から初期化する方法はありますか?

私は次のことを達成しようとしている:

  1. 100年前に=分、今日=、最大を選択することができます日付の範囲を制限します。
  2. データベースに現在保存されている日付(ある場合)を使用してdatepickerを初期化します。
  3. dobテキストフィールドに特定の形式で選択した日付を表示します。

私のフォームは、次のようになります。.to_s(:long)は私が後だ表示形式で

<%= form_for @user do |f| %> 
    <%= f.text_field :dob, :class=>'date-selector-dob', :value => (@user.dob.blank? ? '' : @user.dob.to_s(:long)) %> 
<% end %> 

次のjavascriptでは、datepickerは機能しますが、テキストフィールドは正しくフォーマットされていますが、最大/最小の日付は設定されていません。

$(function(){ // enabledate picker 
    $('.date-selector-dob').datepicker(); 
}); 

私は次のように私も、最小/最大範囲を設定し、初期化します。この機能に追加:

$(function(){ // enable date picker 
    $('.date-selector-dob').datepicker({minDate: new Date('-100Y'), maxDate: new Date('-1D')}); // enable datepicker and set range 
    $('.date-selector-dob').datepicker('setDate', new Date($('.date-selector-dob').attr('value'))); // initialize datepicker with stored value 

}); 

このは正しく日付ピッカーを初期化ですが、設定ではありません最小/最大範囲。私のアプローチは間違っていますか?

さらに、拡張機能は私の書式設定文字列をリセットし、データは.to_s(:long)に従って表示されません。上記の基本関数を使用すると、この書式設定文字列が適切に適用されます。何が原因でしょうか?

私はこれで私の髪を引っ張っています!誰かが私が見逃しているものを見て、私が間違っていることを理解するのを助けることができれば、本当に感謝しています。ありがとう!

答えて

1

のJavaScriptのDate-100Yまたは-1Dはので、あなたのminDatemaxDate設定は日付ピッカーが理解できるものであることを行っていない何を意味するかわかりません。 fine manualから

MinDateプロパティ

今日からDateオブジェクトを介した、または現在dateFormatの文字列として最小選択日付、または日数を設定します(例:7月の場合は「m」、週の場合は「w」、日の場合は「d」、たとえば「-1y -1m」)、または無制限の場合はnullです。

$('.date-selector-dob').datepicker({ 
    minDate: '-100y', 
    maxDate: '-1d' 
    }); 

デモ:

:あなたは日付ピッカーは、日付の特定の形式を使用したい場合はhttp://jsfiddle.net/ambiguous/RQgCW/

dateFormatオプションを使用

は、だから、この欲しいです解析され表示された日付の形式。この属性は、地域化属性の1つです。可能なフォーマットの完全なリストについては、formatDate機能を参照してください。

また、あなたはこのスキップすることができるはず:

$('.date-selector-dob').datepicker('setDate', new Date($('.date-selector-dob').attr('value'))) 

を、ちょうど(好ましくISO 8601形式で)これまでの<input>value属性を設定し、日付ピッカーを取ることができるはずですそこからそれ自身で。

+0

おかげミューを正しい日付形式を指定する必要があり、このため、道に従うことによって、日付を設定することができ

$(function(){ $('.date-selector-dob').datepicker({ dateFormat: 'M dd, yyyy', minDate: '-1y', maxDate: '+1m', }); }); 

! min/maxは現在期待どおりに動作しています。私は表示形式の問題にもかかわらず混乱しています。これは、日付文字列を表示しているテキストフィールドに関連しています。したがって、フォーマットはレールで処理すべきではありませんか?私はなぜsetDateメソッドを追加すると、このメソッドを使わなくてもうまくいくと、この作業を止めるべきなのか混乱していますか? –

+0

@AndyHarvey:あなたは、[ISO 8601](http://en.wikipedia.org/wiki/ISO-8601)形式で日付を開始し、日付ピッカーに使用する形式を伝えることをお勧めします。 datepickerは日付をテキスト入力に書き込むため、使用する形式を知る必要があります。 ISO 8601は、日付ピッカーが解析するのが簡単です。そして、 'setValue'呼び出しが必要ないはずです。ちょうど' 'の値を設定すれば十分です。 –

+0

ああ、ところで、dateFormatは問題を解決します。しかし、私はまだRailsで定義されたフォーマットが適用されない理由について興味があります。 –

0

datepickerオブジェクトの初期化時に、すべての条件をハッシュとして渡す必要があります。あなたの例では、日付ピッカーが2度目に初期化されました。それは日付範囲を取得できないという問題です。あなたが再び私を保存し、(すでに「DATEFORMAT」として初期化子のparamで指定)

$('#popupDatepicker').val("Feb 13, 2012"); 
関連する問題