修改Ext.DatePicker使得Ext.form.DateField只选择年月
gogo1217
2008-07-30
在最近一个项目中用到了Ext,学到了很多新的东西,同时JS水平得到了大大的提升。项目中需要一个年月输入框,不带日期的,可是Ext本身不带这样的功能,没办法只能自己扩展。 G了一下得到2篇文章 http://www.iteye.com/topic/105492 http://blog.csdn.net/forgetdavi/archive/2007/09/07/1776079.aspx 按照他的做法,依葫芦画瓢,做出来了,但是出现了问题。 首先他用的ID识别,这使得在一个页面中如果只有一个这样的控件是有效的,但是多个时,第二个被触发的控件的日期选择还是会显示,因此不能采用ID识别。 琢磨了下,修改Ext.DatePicker,把onRender 下的修改部分改为 if (this.format.indexOf('d') == -1) { this.el.select("table.x-date-inner").hide(); this.el.child("td.x-date-bottom").hide(); } 来隐藏日期选择。 同时把update方法修改的部分改为 if (this.format.indexOf('d') == -1 && this.getValue() != date) { this.setValue(date); this.fireEvent("select", this, this.value); } 来获得选择的年月比较好。 而Ext.form.DateField则不需要做任何修改。 用法如下 var date = new Ext.form.DateField({ ... format: 'Y年m月', ... }); 其中format也可以为'Ym','m/Y'等之类的只要不带d的都会按照只选择年月去执行 |
|
butnet
2008-08-07
请问下,我在onRender方法最后,加的
if (this.format.indexOf('d') == -1) { this.el.select("table.x-date-inner").hide(); this.el.child("td.x-date-bottom").hide(); }但这样在选择时,原来日期选择的地方就会空出一块来,这样影响美观, 我想把这块空的去掉 this.el.select("table.x-date-inner").remove(); this.el.child("td.x-date-bottom").remove();但这样问题又来了,在IE里选择年月的DIV显示不完,只能看到上面一点点内容,在FF里还可以显示完全,但背景透明的,不好看(这个透明我搞定了) 我想问问,有没有什么办法让选择年月的DIV在IE里显示完全? 谢谢! |
|
butnet
2008-08-07
请问下,我在onRender方法最后,加的
if (this.format.indexOf('d') == -1) { this.el.select("table.x-date-inner").hide(); this.el.child("td.x-date-bottom").hide(); }但这样在选择时,原来日期选择的地方就会空出一块来,这样影响美观, 我想把这块空的去掉 this.el.select("table.x-date-inner").remove(); this.el.child("td.x-date-bottom").remove();但这样问题又来了,在IE里选择年月的DIV显示不完,只能看到上面一点点内容,在FF里还可以显示完全,但背景透明的,不好看(这个透明我搞定了) 我想问问,有没有什么办法让选择年月的DIV在IE里显示完全? 我是个初学者,谢谢! |
|
gogo1217
2008-08-08
你说的办法,我开始也尝试过,也是这个问题.
最好的办法是能在按下日期选择的时候,就能把年月拉下来. |
|
cats_tiger
2008-08-09
datepicker还是用my97,什么功能都有了。
|
|
butnet
2008-08-16
gogo1217 写道 你说的办法,我开始也尝试过,也是这个问题.
最好的办法是能在按下日期选择的时候,就能把年月拉下来. 这个办法我试过,结果是第一次能自动把年月拉下来,第二次就不得行了。 而且拉下来时有点卡(不知道程序问题,还是我机子问题)。 我当时的实现方法,周一回公司我贴上来,一起研究下。 |
|
butnet
2008-08-18
我在很DatePicker的一些函数里,添加了,想让它自动把年月选择弹出来,
结果是在第一次能点击时能出来,后面就不行了. if (this.format.indexOf('d') == -1 ) { this.showMonthPicker(); } |
|
lu_pp
2008-08-21
# if (this.format.indexOf('d') == -1 ) {
# this.showMonthPicker(); # } 我用这个方法后,显示的还是原来的日期,不管第一次还是第2次 |
|
lu_pp
2008-08-21
还有个问题,我点了 输入框后,出现带了月份,这个时候默认显示的当前月份,但是无法让值直接到输入框中。
再次点击月份后,出现月份输入框,再次选择当前月份后,点确定,无效,输入框内还是没有值 只有先选其他月份后,再选回去,才能出现 |
|
butnet
2008-08-22
to lu_pp:
以前没发现这个BUG, 在onMonthClick方法中的button.x-date-mp-ok后加上下面的代码可以解决 //Butnet Add if (this.format.indexOf('d') == -1 ) {// this.setValue(d); this.fireEvent("select", this, this.value); } //Butnet Add End |