Turn out that the _getDate() will fall back to today when not found.
So I need to manually parse it and thus calling _setDateFromField
doesn't matter...

$.fn.getInputDate = function(){
        var elem = this[0];
        if(elem){
                var inst = $.datepicker._getInst(elem._calId);
                var format = inst? inst._get('dateFormat'):
$.datepicker._defaults.dateFormat; //use default when not found
                try{
                        return 
format?$.datepicker.parseDate(format,elem.value):null;
                }catch(ex){}
        }
        return null;
}

On Apr 11, 3:38 pm, Jacky  See <[EMAIL PROTECTED]> wrote:
> The above code has some error.
> Here is my final solution: write another plugin to get the date.
>
> HTML:
>
> <div id="dateRange">
>     Plan Date: <input type="text" id="eventFromDate"/> to <input
> type="text" id="eventToDate"/> <br/>
>     Actual Date: <input type="text" id="actualFromDate"/> to <input
> type="text" id="actualToDate"/>
> </div>
>
> JS:
>
> $("#dateRange input").datepickerRange({showOn:'button'});
>
> /* Update datepicker if found and return the date */
> $.fn.getInputDate = function(){
>         var elem = this[0];
>         if(elem){
>                 var inst = $.datepicker._getInst(elem._calId);
>                 if(inst){
>                         inst._setDateFromField(elem);
>                         return inst._getDate();
>                 }
>         }
>         return null;
>
> }
>
> /*
> Assume from/to date have same ID prefix
> options can provide suffix
> options's beforeShow is overriden
> */
> $.fn.datepickerRange = function(options){
>         options = options || {};
>         var fromSuffix = options.fromSuffix || "FromDate";
>         var toSuffix = options.toSuffix || "ToDate";
>         options.beforeShow = function(input){
>                 var isFrom = (new RegExp(fromSuffix+"$")).test(input.id);
>                 var prefix = input.id.replace(new 
> RegExp("("+fromSuffix+"|"+toSuffix
> +")$"),"");
>                 return {
>                         minDate: isFrom? null: 
> $("#"+prefix+fromSuffix).getInputDate(),
>                         maxDate: !isFrom? null: 
> $("#"+prefix+toSuffix).getInputDate()
>                 };
>         }
>         return this.datepicker(options);
>
> }
>
> On 4月11日, 上午3時14分, Jacky  See <[EMAIL PROTECTED]> wrote:
>
> > I have found some wicked way to do it.
>
> > This is the code where I'm writing a plugin to accept date range pair
> > and auto-init them.
>
> > //Assuming from/to date have same prefix id (e.g. #eventFromDate,
> > #eventToDate)
> > $.fn.datepickerPair = function(options){
> >     return this.datepicker(
> >         $.extend({
> >             beforeShow:function(elem){
> >                 var id = elem.id;
> >                 var isFrom = /FromDate$/.test(id);
> >                 var prefix = id.replace(/(FromDate|ToDate)$/,'');
> >                 var minDate = isFrom?null: $.datepicker._getInst($
> > ("#"+prefix+"FromDate").get(0)._calId)._setDateFromField("#"+prefix
> > +"FromDate");
> >                 var maxDate = !isFrom?null: $.datepicker._getInst($
> > ("#"+prefix+"ToDate").get(0)._calId)._setDateFromField("#"+prefix
> > +"ToDate");
> >                 return {minDate:minDate, maxDate:maxDate};
> >         },options)
> >     );
>
> > }
>
> > Any other 'cleaner' way?
>
> > On 4月11日, 上午1時09分, Jacky  See <[EMAIL PROTECTED]> wrote:
>
> > > Dear all,
>
> > > This is about the ui datepicker.
>
> > > I have an input field with a datepicker, using image as trigger.
> > > The field is not read only, user are allowed to input by keyboard.
>
> > > The problem is that when user type some invalid input like '333333'
> > > the $('#input').datepicker('getdate'), will still only get the last
> > > selected date.
>
> > > Is that any way to get the 'fresh' date?
> > > Any trigger I can call?
> > > I need it to fill in a date range using 'beforeShow' option.

Reply via email to