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