2011-12-27 73 views
3

我遇到了jQuery UI的Datepicker导致Internet Explorer(版本8和9,也许是其他人)有时(但并非总是)崩溃的问题。 IE浏览器在页面加载时或在用日期选择器字段摆弄后大约有25%的时间崩溃。这可能是也可能不是特定于Windows 7.我可以使用从1.6.2到1.7.1的各种不同版本的jQuery来重现问题。jQuery UI Datepicker导致Internet Explorer崩溃

http://jsfiddle.net/wLW8D/

<script> 
    $(function() { 
     $('#someDate').datepicker(); 
    }); 
</script> 

<input type="text" name="someDate" id="someDate" value=""> 

我可以得到IE浏览器导航到的jsfiddle页面很容易崩溃,然后开始玩弄(刷新,选择一个日期,标签出了场等)。

当IE崩溃时,会显示一个对话框:“Internet Explorer已停止工作 - 问题导致程序无法正常工作。如果解决方案可用,Windows将关闭程序并通知您。事件日志显示事件ID为1000的应用程序错误。

有什么建议吗?

~~~~~~~~~

UPDATE:这没有得到解决,但我不愿将其标记为解答或提供一个真正的答案,因为我不明白发生了什么改变,使这行得通。所有发生的问题都发生在IT人员分发的虚拟机上。 IT人员在虚拟机上改变了一些东西(可能是Windows环境,或许?),问题就解决了。

+0

这里没问题,IE8/Win7 – Blazemonger

+1

这听起来像是一个问题哟你的机器。我可以查看jsFiddle并单击该字段 - 虽然日期选择器未设置样式,但仍然显示并适当地对事件作出反应。我在IE9中请求了8次,并且从未发生过崩溃。 – Tejs

+0

这不是我的机器唯一的。这发生在我在办公室检查过的所有机器上。到目前为止,所有的Windows 7 Pro。 –

回答

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); 
    } 
    } 
}); 

(当然我已附加类= DatePicker的在所要求的输入元件)

然后更改日期时,IE总是崩溃。

如果我省略onChangeMonthYear处理程序或只是注释掉inst.input.datepicker ...行,问题就会消失(当然在这种情况下,所需的funcionality也会消失)。

所以我做了一些更多的实验,并意识到问题出在第一行:

var now = new Date(this.value); 

在这里,我们试图建立从输入字段值的日期变量。它看起来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({ 
    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还有:

我使用jQuery 1.7.1和jquery.ui.1.8.16

Miklos