日历插件版本:CURRENT RELEASE 1.2.1
我按照grails插件文档中提到的步骤操作,在所有类型的浏览器中都出现以下错误
Chrome 14.0835:未捕获RangeError:超出最大Callstack大小。
Firefox 6.02:太多递归calendar.js第1851行
IE 9:堆栈空间calendar.js第1850行
答案 0 :(得分: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()
。请查看此"old jscalendar" page上的评论#124和#125。
评论#124(由Chris Lively撰写)
建议更新calendar.js(靠近底部,~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。因此,Date补丁重新定义了setFullYear 函数执行两次,并在执行时导致无限循环。我们 通过确保仅重新定义一次函数来修复它:
if(Date.prototype.msh_oldSetFullYear == null) { Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear; }
这两个都建议更新calendar.js,这是不理想的,因为它是随插件一起提供的。
两个建议:
<calendar:resources/>
和您的视图GSP?如果是这样,请删除其中一个。答案 1 :(得分: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);
};
答案 2 :(得分:0)
我解决这个问题的方法是
1)下载了插件的源代码 2)在本地创建了一个具有相同名称的插件。 3)将原始源文件复制到我创建的本地插件 4)如上所述更改了javascript文件 5)编译并打包插件 6)删除了我的主项目中的旧插件 7)从步骤5创建的zip文件安装新创建的插件。
它就像一个魅力。
感谢Rob Hruska指出我在javascript文件中发表评论
答案 3 :(得分:0)
我遇到了同样的问题,我已经将<calendar:resources/>
放在我的主jsp中以及在jsp中呈现的模板中。删除其中一个解决了这个问题。