Код 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()
.Посмотрите комментарии № 124 и № 125 на этой "старой странице jscalendar" .
Комментарий № 124 (автор Крис Лайвли)
Предлагает обновить 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 (ответ от larisa)
Проблема с рекурсией возникает из-за многократного включения календаря JavaScriptна странице.В результате патч Date дважды переопределяет функцию setFullYear и вызывает бесконечный цикл при его выполнении.Мы исправили это, убедившись, что функция переопределена только один раз:
if(Date.prototype.msh_oldSetFullYear == null) {
Date.prototype.msh_oldSetFullYear = Date.prototype.setFullYear;
}
Оба из них предлагают обновления файла calendar.js, что не идеально, так как поставляется с плагином.
Два предложения:
- Убедитесь, что вы не импортируете ресурсы календаря дважды.У вас есть
<calendar:resources/>
в вашем основном макете и в вашем представлении GSP?Если это так, удалите один из них. - Если это не сработает, возможно, используйте другой плагин.Плагин календаря выглядит так, как будто он не обновлялся некоторое время (он использует более старую версию jscalendar).Если вы чувствуете себя честолюбивым, вы можете сами обновить плагин!