如何使用min / maxValue验证Ext.form.DateField,而不使用时间?

时间:2010-11-12 19:08:36

标签: validation javascript-framework extjs datefield

我遇到以下问题:我想验证一个DateField,使其具有minValue / maxValue范围之间的值。 (大于或等于,低于或等于)

问题是我认为框架花费的时间以毫秒为单位。

我尝试使用自定义vtype,例如:

Ext.apply(Ext.form.VTypes,{
dates: function(val, field){
    try{
        if(this.disabled){
            return true;
        }

        if(Ext.value(val,null,false)==null){
            this.datesText = "This field is required.";
            return this.allowBlank; //the text message won't be shown in case blank is allowed.
        }

        if(Ext.value(field.minValue,null,false)!=null){
            if(Ext.util.Format.date(val,"Ymd")<Ext.util.Format.date(field.minValue,"Ymd")){
                this.datesText = "The value is invalid.<br/>";
                this.datesText = "it must be greater or equal than " + field.minValue;
                return false;
            }
        }

        if(Ext.value(field.maxValue,null,false)!=null){
            if(Ext.util.Format.date(val,"Ymd")>Ext.util.Format.date(field.maxValue,"Ymd")){
                this.datesText = "The value is invalid.<br/>";
                this.datesText = "It must be lower or equal than " + field.maxValue;
                return false;
            }
        }

        return true;

    }catch(e){
        return false;
    }
},
datesText: 'The value is invalid.', //error message
datesMask: / /  //regexp to filter the characters allowed

});

它的基本功能是将值转换为“ Ymd ”格式,然后将值作为数字进行比较。

如果我调试此代码,验证就可以了,但由于某种原因,我仍然收到错误消息。我相信该框架在验证后会再次验证该字段。

谢谢!

圣塞瓦斯蒂安

2 个答案:

答案 0 :(得分:1)

minValue : Date/String

允许的最短日期。可以是有效格式的Javascript日期对象或字符串日期(默认为null)。

maxValue : Date/String

允许的最长日期。可以是有效格式的Javascript日期对象或字符串日期(默认为null)。

如果你需要禁用某些日期

disabledDates : Array

要禁用的“日期”数组,作为字符串。这些字符串将用于构建动态正则表达式,因此它们非常强大。一些例子: //禁用这些确切的日期:

disabledDates: ["03/08/2003", "09/16/2003"]

//每年禁用这几天:

disabledDates: ["03/08", "09/16"]

//仅匹配开头(如果您使用短年有用):

disabledDates: ["^03/08"]

// 2006年3月每天禁用:

disabledDates: ["03/../2006"]

//每年三月禁用每天:

disabledDates: ["^03"]

答案 1 :(得分:0)

取代上面提到的固定日期,请使用:

//doesn't allow past today
maxValue: new Date() 
//Only allows 7 days in the past from current date.
minValue: Ext.Date.add(new Date(), Ext.Date.DAY, -7)