如果我在初始化DatePicker元素时做类似的事情,这是网上某人建议的:
$('.DatePicker').datepicker({
onChangeMonthYear: function(year, month, inst) {
var now = new Date(this.value);
if (now) {
var max = new Date(year, month, 0).getDate();
var day = now.getDate() > max ? max : now.getDate();
var newDate = new Date(year, month-1, day);
inst.input.datepicker('setDate', newDate);
}
}
});
(当然,我已经将class = DatePicker附加到所需的输入元素。)
然后,当更改日期时,IE总是会崩溃。
如果我省略onChangeMonthYear处理程序或仅注释inst.input.datepicker ...行,则问题消失(当然,在这种情况下,所需的功能也会消失)。
因此,我进行了更多实验并意识到问题出在第一行:
var now = new Date(this.value);
在这里,我们尝试从输入字段值构建一个日期变量。看起来IE在本地化格式(比如匈牙利语)下无法构建,因此结果将是NaN。看起来这是真正的问题。不管怎样,对我来说很奇怪的是Chrome和Firefox都能正常工作。
所以我把我的第一行改成了:
var now = inst.input.datepicker('getDate');
现在不再崩溃了。
我发现底部有另一个奇怪的行为:DatePicker上可见一个小矩形。这也会导致鼠标悬停时出现一些错误。但是,我已经找到了解决方法,在我的主模板中jquery.ui.css之后添加了一小段css:
#ui-datepicker-div
{
display: none;
}
所以我很高兴它在IE6、Chrome和Firefox中都能正常工作,就像我想要的那样。
这是我的日期选择器最终初始化代码:
$('.DatePicker').datepicker({
onChangeMonthYear: function(year, month, inst) {
var now = inst.input.datepicker('getDate');
if (now) {
var max = new Date(year, month, 0).getDate();
var day = now.getDate() > max ? max : now.getDate();
var newDate = new Date(year, month-1, day);
inst.input.datepicker('setDate', newDate);
}
}
});
还有我的日期时间选择器:
$('.DateTimePicker').datetimepicker({
onChangeMonthYear: function(year, month, inst) {
var now = inst.input.datepicker('getDate');
if (now) {
var max = new Date(year, month, 0).getDate();
var day = now.getDate() > max ? max : now.getDate();
var newDate = new Date(year, month-1, day,
now.getHours(), now.getMinutes(), now.getSeconds());
inst.input.datepicker('setDate', newDate);
}
}
});
我正在使用jQuery 1.7.1和jquery.ui.1.8.16
Miklos