1

日历插件版本:CURRENT RELEASE 1.2.1

我按照 grails 插件文档中提到的步骤操作,在所有类型的浏览器中都出现以下错误

Chrome 14.0835:未捕获 RangeError:超出最大调用堆栈大小。

Firefox 6.02:太多递归 calendar.js 行 1851

IE 9:超出堆栈空间 calendar.js 第 1850 行

4

4 回答 4

4

有问题的 jscalendar 代码是这样的:

Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    d.__msh_oldSetFullYear(y);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    this.__msh_oldSetFullYear(y);
};

这重新定义了Date.setFullYear(). 看看这个“旧 jscalendar”页面上的评论 #124 和 #125 。

评论#124(克里斯·莱弗利)

建议更新 calendar.js(靠近底部,~line 1850)。

对于那些得到递归错误的人。你只需要评论几行。见下文。

//Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    //d.msh_oldSetFullYear(y);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    //this._msholdSetFullYear(y);
};

评论 #125(拉丽莎回复)

由于页面上包含多个日历 JavaScript,会出现递归问题。结果,日期补丁重新定义了 setFullYear 函数两次,并在执行时导致无限循环。我们通过确保该函数只重新定义一次来修复它:

if(Date.prototype.msh_oldSetFullYear == null) {
    Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear;
}

这两个都建议对 calendar.js 进行更新,这并不理想,因为它是随插件一起提供的。

两个建议:

  • 确保您没有两次导入日历资源。您<calendar:resources/>的主要布局视图中是否有 GSP?如果是这样,请删除其中之一。
  • 如果这不起作用,也许使用不同的插件。日历插件看起来有一段时间没有更新了(它使用的是旧版本的 jscalendar)。如果你有野心,你可以自己去更新插件!
于 2011-09-26T13:47:30.927 回答
1

这对我有用:

if (Date.prototype.__msh_oldSetFullYear == null) {
    Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
}
Date.prototype.setFullYear = function(y) {
    var d = new Date(this);
    Date.prototype.__msh_oldSetFullYear.apply(d, arguments);
    if (d.getMonth() != this.getMonth())
        this.setDate(28);
    Date.prototype.__msh_oldSetFullYear.apply(this, arguments);
};
于 2012-09-04T05:04:00.700 回答
0

我解决这个问题的方法是

1) 下载了插件的源码 2) 在本地创建了一个同名插件。3) 将原始源文件复制到我创建的本地插件 4) 按照上面的建议更改 javascript 文件 5) 编译并打包插件 6) 在我的主项目中删除旧插件 7) 从 zip 文件中安装新创建的插件从第 5 步创建。

它就像一个魅力。

感谢 Rob Hruska 指出我在 javascript 文件中的评论位置

于 2011-09-27T08:15:47.110 回答
0

我面临同样的问题,我已经放置<calendar:resources/>在我的主 jsp 以及在 jsp 中呈现的模板中。删除其中一个解决了这个问题。

于 2016-10-03T10:47:51.480 回答