我需要一个扩展的datefield 控件, 可以输入 至今 文字在输入框内!

如题:
我需要一个扩展的datefield 控件, 可以输入 至今 文字在输入框内!

想要的效果如下图:
[img]http://dl.iteye.com/upload/attachment/294226/4bf9bf54-e687-3dc9-b64d-a512b029a504.png[/img]

兄弟,我再给你找一点,这个Today是在DatePicker.js里修改

[code="js"]
todayText : 'Today',//这里改成“至今”
//创建Today按钮的地方。
this.todayBtn = new Ext.Button({
renderTo: this.el.child('td.x-date-bottom', true),
text: String.format(this.todayText, today),
tooltip: String.format(this.todayTip, today),
handler: this.selectToday,
scope: this
}
[/code]
看到了吗?那个handler绑定的就是点击的函数。这里是selectToday。
[code="js"]
selectToday : function(){
if(this.todayBtn && !this.todayBtn.disabled){
this.setValue(new Date().clearTime());
this.fireEvent('select', this, this.value);
}
}
[/code]

看到这个函数力的 this.setValue(new Date().clearTime());设置今天的值。

你这里 this.setValue("至今");就好了。

为什么这么做?这样还要改格式验证,因为“至今”不是一个有效的日期。。直接输入今天的日期不行吗?

拿给你个提示吧。这个datefield 也支持手工录入的,只要就是验证过不去,你把验证哪一块的源代码改一下,或者扩展datefield ,重写日写验证方法,把至今的验证去掉,也就是如果取得的文本是“至今”,就不执行日期验证,其他的还照旧

呵呵。这大概只能给你个思路,剩下的要自己来,这样才能提高。我再给你找一点吧。DateFied.js文件(源代码。)
[code="js"]
setValue : function(date){
return Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
}
[/code]

看到了吗?这是赋值的地方,从这里看到对date数据有两层验证,一个是parseDate(),一个是函数。

然后这两个函数
[code="js"]
// private
parseDate : function(value) {
if(!value || Ext.isDate(value)){
return value;
}

    var v = this.safeParse(value, this.format),
        af = this.altFormats,
        afa = this.altFormatsArray;

    if (!v && af) {
        afa = afa || af.split("|");

        for (var i = 0, len = afa.length; i < len && !v; i++) {
            v = this.safeParse(value, afa[i]);
        }
    }
    return v;
},

// private
formatDate : function(date){
return Ext.isDate(date) ? date.dateFormat(this.format) : date;
}
[/code]

看到了吧。你就在这里改一下就行了。在这两个函数的开头加上对“至今”的判断。
[code="js"]
// private
parseDate : function(value) {
if(Ext.isString(value)&&value=="至今"){
return value;
}
if(!value || Ext.isDate(value)){
return value;
}

    var v = this.safeParse(value, this.format),
        af = this.altFormats,
        afa = this.altFormatsArray;

    if (!v && af) {
        afa = afa || af.split("|");

        for (var i = 0, len = afa.length; i < len && !v; i++) {
            v = this.safeParse(value, afa[i]);
        }
    }
    return v;
},

// private
formatDate : function(date){
if(Ext.isString(value)&&value=="至今"){
return value;
}
return Ext.isDate(date) ? date.dateFormat(this.format) : date;
}
[/code]

上面是我大概该的,没有测试,你试试,同时为你提供个改的方法

这个要去阅读源代码了。看看在哪里生成的Today按钮。然后你就改正他的显示文本和单击事件。。