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.