问题描述
日期验证代码(参照的ExtJs4 的例子:ext-4.0.1-gpl/ext-4.0.1/examples/form/adv-vtypes.html):Ext.apply(Ext.form.field.VTypes, { daterange: function(val, field) { var date = field.parseDate(val); if (!date) { return false; } if (field.startDateField && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) { var start = field.up('form').down('#' + field.startDateField); start.setMaxValue(date); start.validate(); this.dateRangeMax = date; }else if (field.endDateField && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) { var end = field.up('form').down('#' + field.endDateField); end.setMinValue(date); end.validate(); this.dateRangeMin = date; } /* * Always return true since we're only using this vtype to set the * min/max allowed values (these are tested for after the vtype test) */ return true; }, daterangeText: 'Start date must be less than end date' }); 在日期中使用上面的验证:{ xtype: 'container', fieldLabel: 'Name', hideLabel:false, layout: 'hbox', combineErrors: true, defaults: { hideLabel: 'true' }, items: [{ fieldLabel: '关系建立开始', hideLabel:false, editable:false, name: 'searchMarginBeginStart', id: 'searchMarginBeginStart', vtype: 'daterange', // xtype: 'datefield', format:'Y-m-d', width: 300, endDateField: 'searchMarginBeginEnd', // listeners:{ specialkey:function(field,e){ var keyCode = e.getKey(); if(keyCode == e.BACKSPACE){ if(!this.editable){ e.stopEvent(); return false; } } } } }, { fieldLabel: '关系建立结束', hideLabel:false, editable:false, name: 'searchMarginBeginEnd', id: 'searchMarginBeginEnd', vtype: 'daterange', // xtype: 'datefield', format:'Y-m-d', width: 300, startDateField: 'searchMarginBeginStart', // listeners:{ specialkey:function(field,e){ var keyCode = e.getKey(); if(keyCode == e.BACKSPACE){ if(!this.editable){ e.stopEvent(); return false; } } } } }] } 选好时间后,点击查询,ie提示这个ie溢出是为什么?
解决方案
给个方法你:Ext.apply(Ext.form.VTypes,{//自定义验证dateCompar:function(complaintEndDate,field){if(field.confirmTo){//要比较的另外一个组件,如果存在进行比较var complaintBeginDate = Ext.get(field.confirmTo).getValue();//得到比较组件return dateCompar(complaintBeginDate,complaintEndDate);}}});function dateCompar(dateOne,dateTwo){//如果开始和结束时间都不为空,进行比较if(Ext.util.Format.trim(dateOne).length > 0 && Ext.util.Format.trim(dateTwo).length > 0){dateOne = dateOne.replace(/-/g,"/");dateTwo = dateTwo.replace(/-/g,"/");if(Date.parse(dateOne) > Date.parse(dateTwo)){return false;}else{return true;}}else{return true;}}
解决方案二:
你在这个控件fieldLabel: '关系建立开始', vtype: 'daterange', 做了一次验证,然后又在下面 fieldLabel: '关系建立结束', 做了一次比较,你已经对format:'Y-m-d',进行了验证控制,就不需要证明是否是格式正确,你需要比较的就是后面的时间不能大于前面的时间而已