extjs 时间控件只显示年月

调用代码一:

[javascript]
view plain
copy
print
?

  1. var monthField = new Ext.ux.MonthField({
  2. id:‘month‘,
  3. fieldLabel: ‘月份‘,
  4. allowBlank:false,
  5. readOnly : true,
  6. format:‘Y年m月‘,
  7. listeners:{"blur":function(){
  8. alert()
  9. }}
  10. );

调用代码二(部分):

[javascript]
view plain
copy
print
?

  1. fieldLabel: ‘所属日期‘,
  2. width : 150,
  3. xtype: ‘monthfield‘,
  4. name: ‘date‘,
  5. hiddenName : ‘date‘,
  6. format: "Y-m",
  7. editable : false,
  8. value:new Date().dateFormat(‘Y-m‘),

下面代码全复制做成一个monthPick.js就OK了,页面导入就可以像上面两种使用方法使用

[javascript]
view plain
copy
print
?

  1. //monthPick.js
  2. //----------------
  3. Ext.ux.MonthPicker=Ext.extend(Ext.Component,{
  4. format:"M-y",
  5. okText:Ext.DatePicker.prototype.okText,
  6. cancelText:Ext.DatePicker.prototype.cancelText,
  7. constrainToViewport:true,
  8. monthNames:Date.monthNames,
  9. startDay:0,
  10. value:0,
  11. noPastYears:false,
  12. initComponent:function () {
  13. Ext.ux.MonthPicker.superclass.initComponent.call(this);
  14. this.value=this.value?
  15. this.value.clearTime():new Date().clearTime();
  16. this.addEvents(
  17. ‘select‘
  18. );
  19. if(this.handler) {
  20. this.on("select",this.handler,this.scope||this);
  21. }
  22. },
  23. focus:function () {
  24. if(this.el) {
  25. this.update(this.activeDate);
  26. }
  27. },
  28. onRender:function (container,position) {
  29. var m=[‘<div style="width: 200px; height:175px;"></div>‘]
  30. m[m.length]=‘<div class="x-date-mp"></div>‘;
  31. var el=document.createElement("div");
  32. el.className="x-date-picker";
  33. el.innerHTML=m.join("");
  34. container.dom.insertBefore(el,position);
  35. this.el=Ext.get(el);
  36. this.monthPicker=this.el.down(‘div.x-date-mp‘);
  37. this.monthPicker.enableDisplayMode(‘block‘);
  38. this.el.unselectable();
  39. this.showMonthPicker();
  40. if(Ext.isIE) {
  41. this.el.repaint();
  42. }
  43. this.update(this.value);
  44. },
  45. createMonthPicker:function () {
  46. if(!this.monthPicker.dom.firstChild) {
  47. var buf=[‘<table border="0" cellspacing="0">‘];
  48. for(var i=0;i<6;i++) {
  49. buf.push(
  50. ‘<tr><td class="x-date-mp-month"><a href="#">‘,this.monthNames[i].substr(0,3),‘</a></td>‘,
  51. ‘<td class="x-date-mp-month x-date-mp-sep"><a href="#">‘,this.monthNames[i+6].substr(0,3),‘</a></td>‘,
  52. i==0?
  53. ‘<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td></tr>‘:
  54. ‘<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>‘
  55. );
  56. }
  57. buf.push(
  58. ‘<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">‘,
  59. this.okText,
  60. ‘</button><button type="button" class="x-date-mp-cancel">‘,
  61. this.cancelText,
  62. ‘</button></td></tr>‘,
  63. ‘</table>‘
  64. );
  65. this.monthPicker.update(buf.join(‘‘));
  66. this.monthPicker.on(‘click‘,this.onMonthClick,this);
  67. this.monthPicker.on(‘dblclick‘,this.onMonthDblClick,this);
  68. this.mpMonths=this.monthPicker.select(‘td.x-date-mp-month‘);
  69. this.mpYears=this.monthPicker.select(‘td.x-date-mp-year‘);
  70. this.mpMonths.each(function (m,a,i) {
  71. i+=1;
  72. if((i%2)==0) {
  73. m.dom.xmonth=5+Math.round(i*.5);
  74. }else {
  75. m.dom.xmonth=Math.round((i-1)*.5);
  76. }
  77. });
  78. }
  79. },
  80. showMonthPicker:function () {
  81. this.createMonthPicker();
  82. var size=this.el.getSize();
  83. this.monthPicker.setSize(size);
  84. this.monthPicker.child(‘table‘).setSize(size);
  85. this.mpSelMonth=(this.activeDate||this.value).getMonth();
  86. this.updateMPMonth(this.mpSelMonth);
  87. this.mpSelYear=(this.activeDate||this.value).getFullYear();
  88. this.updateMPYear(this.mpSelYear);
  89. this.monthPicker.show();
  90. //this.monthPicker.slideIn(‘t‘, {duration:.2});
  91. },
  92. updateMPYear:function (y) {
  93. if(this.noPastYears) {
  94. var minYear=new Date().getFullYear();
  95. if(y<(minYear+4)) {
  96. y=minYear+4;
  97. }
  98. }
  99. this.mpyear=y;
  100. var ys=this.mpYears.elements;
  101. for(var i=1;i<=10;i++) {
  102. var td=ys[i-1],y2;
  103. if((i%2)==0) {
  104. y2=y+Math.round(i*.5);
  105. td.firstChild.innerHTML=y2;
  106. td.xyear=y2;
  107. }else {
  108. y2=y-(5-Math.round(i*.5));
  109. td.firstChild.innerHTML=y2;
  110. td.xyear=y2;
  111. }
  112. this.mpYears.item(i-1)[y2==this.mpSelYear?‘addClass‘:‘removeClass‘](‘x-date-mp-sel‘);
  113. }
  114. },
  115. updateMPMonth:function (sm) {
  116. this.mpMonths.each(function (m,a,i) {
  117. m[m.dom.xmonth==sm?‘addClass‘:‘removeClass‘](‘x-date-mp-sel‘);
  118. });
  119. },
  120. selectMPMonth:function (m) {
  121. },
  122. onMonthClick:function (e,t) {
  123. e.stopEvent();
  124. var el=new Ext.Element(t),pn;
  125. if(el.is(‘button.x-date-mp-cancel‘)) {
  126. this.hideMonthPicker();
  127. //this.fireEvent("select", this, this.value);
  128. }
  129. else if(el.is(‘button.x-date-mp-ok‘)) {
  130. this.update(new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate()));
  131. //this.hideMonthPicker();
  132. this.fireEvent("select",this,this.value);
  133. }
  134. else if(pn=el.up(‘td.x-date-mp-month‘,2)) {
  135. this.mpMonths.removeClass(‘x-date-mp-sel‘);
  136. pn.addClass(‘x-date-mp-sel‘);
  137. this.mpSelMonth=pn.dom.xmonth;
  138. }
  139. else if(pn=el.up(‘td.x-date-mp-year‘,2)) {
  140. this.mpYears.removeClass(‘x-date-mp-sel‘);
  141. pn.addClass(‘x-date-mp-sel‘);
  142. this.mpSelYear=pn.dom.xyear;
  143. }
  144. else if(el.is(‘a.x-date-mp-prev‘)) {
  145. this.updateMPYear(this.mpyear-10);
  146. }
  147. else if(el.is(‘a.x-date-mp-next‘)) {
  148. this.updateMPYear(this.mpyear+10);
  149. }
  150. },
  151. onMonthDblClick:function (e,t) {
  152. e.stopEvent();
  153. var el=new Ext.Element(t),pn;
  154. if(pn=el.up(‘td.x-date-mp-month‘,2)) {
  155. this.update(new Date(this.mpSelYear,pn.dom.xmonth,(this.activeDate||this.value).getDate()));
  156. //this.hideMonthPicker();
  157. this.fireEvent("select",this,this.value);
  158. }
  159. else if(pn=el.up(‘td.x-date-mp-year‘,2)) {
  160. this.update(new Date(pn.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));
  161. //this.hideMonthPicker();
  162. this.fireEvent("select",this,this.value);
  163. }
  164. },
  165. hideMonthPicker:function (disableAnim) {
  166. Ext.menu.MenuMgr.hideAll();
  167. },
  168. showPrevMonth:function (e) {
  169. this.update(this.activeDate.add("mo",-1));
  170. },
  171. showNextMonth:function (e) {
  172. this.update(this.activeDate.add("mo",1));
  173. },
  174. showPrevYear:function () {
  175. this.update(this.activeDate.add("y",-1));
  176. },
  177. showNextYear:function () {
  178. this.update(this.activeDate.add("y",1));
  179. },
  180. update:function (date) {
  181. this.activeDate=date;
  182. this.value=date;
  183. if(!this.internalRender) {
  184. var main=this.el.dom.firstChild;
  185. var w=main.offsetWidth;
  186. this.el.setWidth(w+this.el.getBorderWidth("lr"));
  187. Ext.fly(main).setWidth(w);
  188. this.internalRender=true;
  189. if(Ext.isOpera&&!this.secondPass) {
  190. main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";
  191. this.secondPass=true;
  192. this.update.defer(10,this,[date]);
  193. }
  194. }
  195. }
  196. });
  197. Ext.reg(‘monthpicker‘,Ext.ux.MonthPicker);
  198. Ext.ux.MonthItem=function (config) {
  199. Ext.ux.MonthItem.superclass.constructor .call(this,new Ext.ux.MonthPicker(config),config);
  200. this.picker=this.component;
  201. this.addEvents(‘select‘);
  202. this.picker.on("render",function (picker) {
  203. picker.getEl().swallowEvent("click");
  204. picker.container.addClass("x-menu-date-item");
  205. });
  206. this.picker.on("select",this.onSelect,this);
  207. };
  208. Ext.extend(Ext.ux.MonthItem,Ext.menu.Adapter,{
  209. onSelect:function (picker,date) {
  210. this.fireEvent("select",this,date,picker);
  211. Ext.ux.MonthItem.superclass.handleClick.call(this);
  212. }
  213. });
  214. Ext.ux.MonthMenu=function (config) {
  215. Ext.ux.MonthMenu.superclass.constructor .call(this,config);
  216. this.plain=true;
  217. var mi=new Ext.ux.MonthItem(config);
  218. this.add(mi);
  219. this.picker=mi.picker;
  220. this.relayEvents(mi,["select"]);
  221. };
  222. Ext.extend(Ext.ux.MonthMenu,Ext.menu.Menu,{
  223. cls:‘x-date-menu‘
  224. });
  225. Ext.ux.MonthField=function (cfg) {
  226. Ext.ux.MonthField.superclass.constructor .call(this,Ext.apply({
  227. },cfg||{
  228. }));
  229. }
  230. Ext.extend(Ext.ux.MonthField,Ext.form.DateField,{
  231. format:"Y-m",
  232. triggerClass:"x-form-date-trigger",
  233. menuListeners:{
  234. select:function (m,d) {
  235. this.setValue(d.format(this.format));
  236. },
  237. show:function () {
  238. this.onFocus();
  239. },
  240. hide:function () {
  241. this.focus.defer(10,this);
  242. var ml=this.menuListeners;
  243. this.menu.un("select",ml.select,this);
  244. this.menu.un("show",ml.show,this);
  245. this.menu.un("hide",ml.hide,this);
  246. }
  247. },
  248. onTriggerClick:function () {
  249. if(this.disabled) {
  250. return ;
  251. }
  252. if(this.menu==null) {
  253. this.menu=new Ext.ux.MonthMenu();
  254. }
  255. Ext.apply(this.menu.picker,{
  256. });
  257. this.menu.on(Ext.apply({
  258. },this.menuListeners,{
  259. scope:this
  260. }));
  261. this.menu.show(this.el,"tl-bl?");
  262. }
  263. });
  264. Ext.reg("monthfield",Ext.ux.MonthField);

extjs 时间控件只显示年月

时间: 2024-10-13 03:57:49

extjs 时间控件只显示年月的相关文章

wpf 时间控件只显示年月

最近的项目,查询时只需要年和月,不需要日,因此需要对原有的DatePicker进行修改,查询了网上的内容,最终从一篇帖子里看到了添加附加属性的方法,地址是http://stackoverflow.com/questions/1798513/wpf-toolkit-datepicker-month-year-only 原文是用了两个类,其中一个是为了让DatePicker下的Calendar只显示年月,不显示日,另一个类是为了让DatePicker格式化为yyyy-MM格式,但是从文章中可以看出,

时间控件只显示年月

<input id="db" /> 初始化加载db标签. $(function () { $('#db').datebox({ onShowPanel: function () {//显示日趋选择对象后再触发弹出月份层的事件,初始化时没有生成月份层 span.trigger('click'); //触发click事件弹出月份层 if (!tds) setTimeout(function () {//延时触发获取月份对象,因为上面的事件触发和对象生成有时间间隔 tds = p

zui框架配置日期控件只显示年月

zui框架配置日期控件datetimepicker只显示年月 <!DOCTYPE html> <head> <script src="~/Scripts/jquery-1.11.3.min.js"></script> <script src="~/res/zui-1.9.1-dist/dist/js/zui.min.js"></script> <script src="~/res

ExtJs4.0日期控件只显示年月按年月格式会跳月的解决办法

如果是Ext.form.panel的话,只要设置一下属性就可以.如下代码: { text : '期间', width : 80, sortable : true, dataIndex : 'accountPeriod', format : 'Ym' } 如果是Ext.grid.panel的话,比较麻烦.网上也有各位大神的解决方法,不过都比较麻烦,要重写控件,我向一位大牛请教后整理出一个非常简单的方法,代码: Ext.define('Dpap.branchWithHold.WithHoldGrid

微信小程序中使用vant-weapp中时间控件默认显示每月1号

前提:使用filed框去调用时间选择组件 思路:js中获取当前时间戳,通过转换为时间字符串的方法只转换到年月,日的话选择‘01’为固定值,这样返回的就是每个月的1号的日期字符串了.到时候显示到filed组件即可. 弹出时间选择器默认选择当前月1号:上述已经获取到了当前月1号的日期字符串了,只需要在转换为时间戳,把这个值赋值到时间选择器的value属性上即可. 贴上实现的代码: 1 //获取当前月1号的方法 2 getCurrentMonthOfone(){ 3 var that = this;

jquery easyui datebox 时间控件默认显示当前日期的实现方法

添加如下代码,其中startTime为<input >中id值  <script>//得到当前日期 formatterDate = function(date) { var day = date.getDate() > 9 ? date.getDate() : "0" + date.getDate(); var month = (date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : "0&qu

Ext5.1日期控件仅显示年月

1.注册xtype类型 2.保存文件为xxxx.js 3.使用 xtype : monthfield return this.buildToolbar({ items: [ { xtype: 'monthfield', cId: 'dfBeginDate', labelWidth: 40, width: 150, format: 'Y-m', fieldLabel: '日期' }, { xtype: 'monthfield', cId: 'dfEndDate', labelWidth: 20,

easyui datebox 扩展 只显示年月

一个日期控件只显示年月是很正常的事情.可是easyui datebox 不支持这种格式的,要么就是截取字符串,不可取,自己没有写过类似的扩展,但是也算是实现功能了,先来张图吧 本人水平有限写不出高深的东西,代码大家都能看懂,但是还是贡献出来,让大家提提意见共同进步吧 $.extend($.fn.combobox.methods, { yearandmonth: function (jq) { return jq.each(function () { var obj = $(this).combo

datetimepicker 时间控件 1899年问题以及解决方法

bootstrap-datetimepicker时间控件显示问题,显示1899年. 案例回顾: 第一次页面加载完点击时间控件,显示正常. 第二次点击的时候,发现显示为1899年 原因调查:结果发现日期格式化的代码出错了 这类问题可以去读一下bootstrap-datetimepicker的源代码,我们会发现它的日期format格式里面没有上述的这种日期格式,也就导致了日期控件选择时间后无法格式化导致内部异常出现了1899年这样的滑稽bug. 解决方案有2个, 一是直接修改format: 'yyy