修改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
Global site tag (gtag.js) - Google Analytics