2009-10-22 61 views
2

我正在使用帶有jQuery UI日期選擇器的ASP.NET文本框。該文本框允許編輯,以便用戶可以手動輸入日期或清除現有條目。我添加了一個CompareValidator來對文本框執行數據類型檢查,並在使用datepicker選擇日期後導致錯誤。錯誤發生在ASP.NET客戶端驗證中:用於DataTypeCheck的jQuery UI datetimepicker和ASP.NET CompareValidator

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

ValidatorOnChange中發生錯誤。我怎樣才能解決這個問題?是否有可能與ASP.NET驗證控件一起使用datepicker?

我的標記是:

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

回答

7

我想我找到了解決方案。這是IE中發生的錯誤,而不是Firefox(我沒有測試任何其他瀏覽器)。將溶液覆蓋在初始化ONSELECT方法:

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

我發現這個問題的描述,並將該溶液here和備用溶液here

+0

+1。這次真是萬分感謝。 – 2010-01-22 15:49:08

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

希望能夠幫助