我遇到一个问题,jQuery UI的Datepicker导致Internet Explorer(版本8和9,可能是其他版本)有时(但不总是)崩溃。 IE在页面加载时或在使用datepicker字段后大约25%的时间崩溃。这可能是也可能不是Windows 7特有的。我可以使用1.6.2到1.7.1的各种不同版本的jQuery重现这个问题。
<script>
$(function() {
$('#someDate').datepicker();
});
</script>
<input type="text" name="someDate" id="someDate" value="">
我可以通过导航到jsfiddle页面然后开始玩游戏(刷新,选择日期,跳出字段等等)来轻松地让IE崩溃。
当IE崩溃时,会显示一个对话框:“Internet Explorer已停止工作 - 导致程序无法正常工作的问题.Windows将关闭程序并在解决方案可用时通知您。”事件日志显示事件ID为1000的应用程序错误。
有什么建议吗?
~~~~~~~~~
更新:这确实得到了解决,但是我对于将其标记为已回答或提供真实答案犹豫不决,因为我不明白为了使其有效而改变了什么。所有出现的问题都发生在由IT人员分发的VM上。 IT人员在虚拟机上改变了一些东西(可能是Windows设置,也许?),问题就解决了。
答案 0 :(得分:0)
如果我在初始化由互联网上某人建议的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);
这里我们尝试从输入字段值构造Date变量。当格式被本地化时(例如我匈牙利语),IE看起来不构造,因此结果将是NaN。看起来这是真正的问题。无论如何,Chrome和Firefox正常运行对我来说很奇怪。
所以我把我的第一行改为:
var now = inst.input.datepicker('getDate');
不再有崩溃了。
我在底线发现了另一个奇怪的行为:DatePicker可以看到一个小矩形。当鼠标悬停时,这也会导致一些错误。但我找到了一个解决方案,在我的主模板中添加了一小段css之后的jquery.ui.css:
#ui-datepicker-div
{
display: none;
}
所以我很高兴它可以在我想要的IE6,Chrome,Firefox中使用。
这是我对datepicker的最终初始化代码:
$('.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').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
米克洛斯