ExtJs datefield将无效日期转换为有效日期

时间:2014-05-07 14:09:03

标签: javascript validation date extjs extjs2

我正在使用ExtJS 2.1,我有以下问题,我讨厌'datefield'。现在必须以“MM / DD / YYYY”格式输入日期。问题是如果用户输入类似'21 / 17'或'16 / 05'的东西,它会转换为有效日期。 (21/17转换为2015年9月17日,16/05转换为2015年4月5日)。如何覆盖此行为?我尝试编写自己的验证器,但这也没有帮助,即使我的验证器返回'false',转换仍然会发生。以下是代码:

var d = new Ext.form.DateField({
            el: el.dom,
            id: id,
            format: 'm/d/Y',
            hideTrigger: false,
            allowBlank: true,
            disabled: isDisabled,
            validator: testForShortDate,
            validateOnBlur: true,
            minLength:6,
            //validationEvent: false,  //string or boolean
            invalidText: 'Enter date as MM/DD/YYYY',
            menuListeners: Ext.applyIf({
                select: function (m, d) {
                    Ext.form.DateField.prototype.menuListeners.select.apply(this, arguments);
                    this.focus.defer(100, this);
                    onDateSelect(m, d, this);
                }
            })
        });

        d.render();

d

function testForShortDate(date) {
if (date.split("/").length != 3) {
    console.log(date.split("/").length);
    return false;
}
return true;

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

如果使用配置的format无法解析日期字段的值,ExtJS会尝试使用其他日期格式。可以使用altFormats属性定义这些格式。

默认值为:

m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d

解释了为什么类似21/17的内容会转换为9/17/2015,因为此处使用的格式为m/d("第21和第34个月; 2014年真的是第9个月2015年)。

如果要完全禁用此功能,只需将该属性设置为空字符串:

altFormats: ''