2009-10-22 1 views
2

Я использую текстовое поле ASP.NET с jQuery UI datepicker. Текстовое поле позволяет редактировать, чтобы пользователь мог ввести дату вручную или удалить существующую запись. Я добавил CompareValidator для выполнения проверки типа данных в текстовом поле, и это вызывает ошибку после выбора даты с помощью datepicker. Ошибка возникает в валидации на стороне клиента ASP.NET:jQuery UI datetimepicker и ASP.NET CompareValidator для DataTypeCheck

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" /> 

Обратите внимание, что недостающий атрибут ID в CompareValidator является намеренным и добавление не делает разницы. Моя инициализация jQuery:

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

ответ

7

Я думаю, что нашел решение. Это ошибка, которая возникает в IE, а не в Firefox (я не тестировал другие браузеры). Решение было переопределить onSelect метод в инициализации:

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

Я нашел описание проблемы и решение here и альтернативное решение here.

+0

+1. Спасибо тебе за это. –

0

Основываясь на решении решения Jamie и the alternate, которое он предоставляет, вот мое обходное решение, чтобы обойти эту странную ошибку, которая возникает только с 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'); 
     } 
    } 
}); 

Надежда, что помогает

Смежные вопросы