升级到1.6.1和jQueryUI 1.8.12后,IE中的jQuery datepicker问题

时间:2011-05-13 15:57:20

标签: jquery jquery-ui internet-explorer-8 datepicker

我们最近将jQuery从1.4.2更新到1.6.1,jQueryUI从1.8.4更新到1.8.12。

在我们的测试中,我们除了一个问题外没有任何严重问题:

我们有一个使用日期选择器的自定义控件,并在选择新日期时更新格式下拉列表。现在,当您选择日期时,您会收到以下错误:

'length' is null or not an object

WebResource.axd

在此升级之前,这在所有现代浏览器中都运行良好。自升级以来,它已停止在IE(64位机器运行Windows 7,IE 8,兼容模式无关紧要)中为我们的测试人员工作。它似乎仍然适用于XP。

在09年回复了related question并获得了very good answer

我已尝试实现这一点,并打破了该功能的“更新下拉列表”部分。

通过调用此函数初始化控件,将控件作为$ scope传递:

function InitializeCalendarDateControl($scope) {
CalendarDateControl_FirstTimeThrough = true;

$("input.date", $scope).datepicker({ changeMonth: true, changeYear: true, yearRange: '1850:c+5'});  

var groupedControls = $("div.CalendarDateControlCssClass[groupname!=]", $scope);


    --snip some control hiding stuff
    --snip some time format validation stuff


if (!$scope.hasClass("CalendarDateControlCssClass")) {
    $("input.hasDatepicker, input.hh, input.mm, select.dates, select.ampm", $scope).live("change", function () {
        CalendarDateControl_FirstTimeThrough = false;
        updateControls($(this));
    });

    if (groupedControls.length > 0) {
        $("div.CalendarDateControlCssClass", $scope).each(function () {
            updateControls($(this).children("input:eq(0)"));
        });
    }
} else {
    $("input.hasDatepicker, input.hh, input.mm, select.dates, select.ampm", $scope).live("change", function () {
        CalendarDateControl_FirstTimeThrough = false;
        updateControls($(this));
    });
    if (groupedControls.length > 0) {
        updateControls($scope.children("input:eq(0)"));
    }
}
}

updateControls函数是更新下拉列表的函数。

使用上面答案中链接的修补程序,似乎没有触发更改事件。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

此刻我会升级到1.5.2,因为1.6 +中可能存在一些潜在的突破变化