我正在使用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;
有人可以帮忙吗?
答案 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: ''