2

我正在使用 ExtJS 2.1,但遇到以下问题,我讨厌“日期字段”。现在必须以“MM/DD/YYYY”格式输入日期。问题是,如果用户输入诸如“21/17”或“16/05”之类的内容,它将被转换为有效日期。(21/17 转换为 9/17/2015,16/05 转换为 4/05/2015)。如何覆盖此行为?我尝试编写自己的验证器,但这也无济于事,即使我的验证器返回“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;

任何人都可以帮忙吗?

4

1 回答 1

2

如果日期字段的值无法使用配置的format. 这些格式可以使用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(2014 年的“第 21 个月”实际上是 2015 年的第 9 个月)。

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

altFormats: ''
于 2014-05-07T14:47:16.293 回答