【问题标题】:ExtJs converts certain validExtJs 转换某些有效的
【发布时间】:2014-05-29 23:18:29
【问题描述】:

我知道我之前问过类似的问题enter link description here。然而,这略有不同。 ExtJs 2.1 仍在将某些无效日期(如 01/00/2012 转换为 01/01/2012)我能够创建下面的代码来防止这种情况发生,但这会产生“脚本错误”。任何人都可以帮助我解决不会产生脚本错误的解决方案吗?下面是创建字段的代码:

        var d = new Ext.form.DateField({
            el: el.dom,
            id: id,
            format: 'm/d/Y',
            hideTrigger: false,
            allowBlank: true,
            disabled: isDisabled,
            validator: extraDateValidator,
            altFormats: 'm/d/Y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|mdy|mdY|d|Y-m-d',
            validateOnBlur: true,
            //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);
                }
            })
        });

这是我的验证器:

function extraDateValidator(date) {
var dateArray = date.split("/");
if (tempForParseDate) {
    Date.parseDate = tempForParseDate
}
if (dateArray.length == 3 && (dateArray[0] > 12 || dateArray[0]<1 || dateArray[1]<1) ) {
    tempForParseDate = Date.parseDate
    Date.parseDate = "";
    return false;
}
return true;

}

我得到的错误是:TypeError: Date.parseDate is not a function。如前所述,我是通过验证器中的这些行故意创建它的:

 tempForParseDate = Date.parseDate
 Date.parseDate = "";

堆栈跟踪:

initComponent(D="01/00/2012")ext-all.js (line 128)
initComponent()ext-all.js (line 128)
onResize()ext-all.js (line 125)
onResize(A=[Trial] Ext.EventObject {})ext-all.js (line 125)
EventManager(b=[Trial] Ext.EventObject {})ext-all.js (line 13)
getViewWidth(R=keydown charCode=0, keyCode=9)ext-base.js (line 10)

【问题讨论】:

  • 究竟什么是“脚本错误”?您是否有来自 JavaScript 控制台/调试器的堆栈跟踪,可以添加到您的问题中?
  • @JoeHolloway 添加了堆栈跟踪和错误,并说明了我是如何创建它的。
  • 好的,那部分现在清楚了,我理解错了。

标签: javascript date extjs extjs2


【解决方案1】:

如果你真的想重写 Date.parseDate 并且不出现 JS 错误,那么将其设置为 no-op 函数,而不是字符串。

Date.parseDate = function(){};

或者更好的是,记录调用重写的 parseDate 函数的时间,这样您至少可以确定您的代码是否在做正确的事情。

Date.parseDate = function(){
  console.log("Called parseDate with args ", arguments);
};

【讨论】:

    猜你喜欢
    • 2014-06-24
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多