jQuery UI日期选择器导致Internet Explorer崩溃

3
我遇到了一个问题,jQuery UI的日期选择器会导致Internet Explorer(版本8和9,也许还有其他版本)有时(但不总是)崩溃。在加载页面或更改日期选择器字段后,IE有大约25%的概率崩溃。这可能与Windows 7有关,我可以使用1.6.2至1.7.1的各种不同版本的jQuery重现此问题。 http://jsfiddle.net/wLW8D/
<script>
    $(function() {
        $('#someDate').datepicker();
    });
</script>

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

我可以很容易地通过进入jsfiddle页面并开始操作(刷新,选择日期,从字段中切换等)来使IE崩溃。

当IE崩溃时,会显示对话框:“Windows Internet Explorer已停止工作 - 程序发生问题而停止运行。Windows将关闭该程序并通知您是否有可用的解决方案。”事件日志显示带有事件ID 1000的应用程序错误。

有什么建议吗?

~~~~~~~~~

更新:这个问题确实得到了解决,但我不确定如何标记它为已回答或提供一个真正的答案,因为我不知道是什么改变使其工作。所有问题的出现都发生在IT团队分发的虚拟机上。IT人员更改了虚拟机上的某些内容(可能是Windows设置之类的),然后问题得到了解决。


1
这听起来像是你的机器出了问题。我可以查看jsFiddle并单击该字段 - 尽管日期选择器没有样式,但它仍然会显示并适当地响应事件。我在IE9中请求了8次,从未崩溃过。 - Tejs
这不是我机器特有的问题。在办公室我检查过的所有机器上都出现了这个问题。到目前为止,所有机器都是Windows 7专业版。 - Mike Munhall
曾经发生过这样的事情。在不同的机器上,使用Windows XP上的IE8和jQuery 1.6.x(我不记得我使用的是哪个版本),但每次都会崩溃(我甚至使用了来自Google CDN的jQuery文件)。然后我改用了另一个版本(1.7),它就可以正常工作了。尝试使用不同版本的jQuery和jQuery UI。 - Jose Adrian
1
我在IE 11的最新版本中使用jQuery 1.10.2和jQuery UI 1.10.3时遇到了相同的问题。我没有使用任何特殊的初始化,只是$("#ChooseDate").datepicker(); 我得到了与所有使用我部署此应用程序的IE(所有版本)的人随机发生的相同错误。 - Howard Renollet
1个回答

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

在这里,我们尝试从输入字段值构建一个日期变量。看起来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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接