【问题标题】:ExtJs datefield converts invalid date to valid dateExtJs datefield 将无效日期转换为有效日期
【发布时间】:2014-06-24 13:38:32
【问题描述】:

我正在使用 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;

谁能帮忙?

【问题讨论】:

    标签: javascript validation date extjs extjs2


    【解决方案1】:

    如果使用配置的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 格式(2014 年的“第 21 个月”实际上是 2015 年的第 9 个月)。

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

    altFormats: ''
    

    【讨论】:

    • 格式字符解释here.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多