jQuery UI 1.7.3的Datepicker与Date.js库冲突导致"过多的递归"错误,主要是因为:
建议升级到更高版本的jQuery UI(最新稳定版),因为后续版本已经修复了与Date.js的兼容性问题。
如果必须使用这两个库,可以尝试以下方法隔离Date.js的影响:
// 在加载Date.js之前保存原生Date方法
var originalDateParse = Date.parse;
var originalDatePrototypeToString = Date.prototype.toString;
// 加载Date.js
// ...
// 恢复Date.parse方法供jQuery UI使用
Date.parse = originalDateParse;
Date.prototype.toString = originalDatePrototypeToString;
如果Date.js支持noConflict模式,可以使用它:
// 加载Date.js后
if (Date.js.noConflict) {
Date.js.noConflict();
}
考虑使用更现代的替代方案:
这种冲突通常出现在:
// 使用jQuery UI Datepicker而不与Date.js冲突的示例
(function($) {
// 保存原生Date方法
var nativeDateMethods = {
parse: Date.parse,
toString: Date.prototype.toString
};
// 临时恢复原生方法
function withNativeDate(fn) {
var originalParse = Date.parse;
var originalToString = Date.prototype.toString;
Date.parse = nativeDateMethods.parse;
Date.prototype.toString = nativeDateMethods.toString;
try {
return fn();
} finally {
Date.parse = originalParse;
Date.prototype.toString = originalToString;
}
}
// 初始化Datepicker
withNativeDate(function() {
$("#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(dateText) {
console.log("Selected date: " + dateText);
}
});
});
})(jQuery);
通过以上方法,可以在大多数情况下解决jQuery UI 1.7.3 Datepicker与Date.js的冲突问题。
没有搜到相关的文章