问题描述
如题:我需要一个扩展的datefield 控件, 可以输入 至今 文字在输入框内!想要的效果如下图: 问题补充:飞雪无情 写道
解决方案
兄弟,我再给你找一点,这个Today是在DatePicker.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 }看到了吗?那个handler绑定的就是点击的函数。这里是selectToday。selectToday : function(){ if(this.todayBtn && !this.todayBtn.disabled){ this.setValue(new Date().clearTime()); this.fireEvent('select', this, this.value); } }看到这个函数力的 this.setValue(new Date().clearTime());设置今天的值。你这里 this.setValue("至今");就好了。
解决方案二:
这个要去阅读源代码了。看看在哪里生成的Today按钮。然后你就改正他的显示文本和单击事件。。
解决方案三:
呵呵。这大概只能给你个思路,剩下的要自己来,这样才能提高。我再给你找一点吧。DateFied.js文件(源代码。)setValue : function(date){ return Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date))); }看到了吗?这是赋值的地方,从这里看到对date数据有两层验证,一个是parseDate(),一个是函数。然后这两个函数// 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; }看到了吧。你就在这里改一下就行了。在这两个函数的开头加上对“至今”的判断。// 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; }上面是我大概该的,没有测试,你试试,同时为你提供个改的方法
解决方案四:
拿给你个提示吧。这个datefield 也支持手工录入的,只要就是验证过不去,你把验证哪一块的源代码改一下,或者扩展datefield ,重写日写验证方法,把至今的验证去掉,也就是如果取得的文本是“至今”,就不执行日期验证,其他的还照旧
解决方案五:
为什么这么做?这样还要改格式验证,因为“至今”不是一个有效的日期。。直接输入今天的日期不行吗?