我正在使用带有jQuery UI datepicker的ASP.NET文本框。文本框允许编辑,以便用户可以手动输入日期或清除现有条目。我添加了一个CompareValidator来对文本框执行数据类型检查,这在使用datepicker选择日期后会导致错误。 ASP.NET客户端验证中发生错误:

Microsoft JScript runtime error: 'length' is null or not an object

ValidatorOnChange中发生错误。我怎样才能解决这个问题?是否可以将datepicker与ASP.NET验证器控件一起使用?

我的标记是:

<asp:Label runat="server" AssociatedControlID="uxInstallDate">Install Date</asp:Label>
<asp:TextBox ID="uxInstallDate" runat="server" Columns="10" />
<asp:CompareValidator runat="server" ControlToValidate="uxInstallDate" Operator="DataTypeCheck" Type="Date" Text="*" ErrorMessage="Install Date must be a date." Display="Dynamic" />

请注意,CompareValidator中缺少的ID属性是有意的,添加它并没有什么区别。我的jQuery初始化是:

$(document).ready(function() {
    $("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true });
});
有帮助吗?

解决方案

我想我找到了解决方案。这是IE中出现的错误,而不是Firefox(我没有测试任何其他浏览器)。解决方案是在初始化中覆盖onSelect方法:

$("#<%= uxInstallDate.ClientID %>").datepicker({ changeMonth: true, onSelect: function() { } });

我找到了问题和解决方案的说明这里和另一种解决方案此处

其他提示

基于Jamie的解决方案和候补他提供的解决方案,这是我的解决方法,以绕过这种仅在IE上出现的奇怪错误。

我假设datepicker控件选择的日期是有效日期,所以如果它可见,我会隐藏CompareValidator的消息或图像错误。

$(".myControl").datepicker({
    onSelect: function() {
        if ($.browser.msie) {
            if ($(this).next("span").css("display") != "none") {
                $(this).next("span").css("display", "none");
            }
        }
        else {
            $(this).trigger('change');
        }
    }
 });

希望有帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top