2011-12-06 78 views
1

我一直在使用jQuery日期選擇器,而且它的功能非常棒。但是,我現在在用戶控件中使用它,並且無法讓它在出現錯誤時失敗:這個jQuery日期選擇器代碼有什麼不對?

對象在創建日期選擇器時不支持此屬性或方法。

我的網站結構如下:

[Root] 
    - [Pages] 
    - MasterPage.Master 
    - GoodsReceived.aspx 
    - [WebControls] 
    - [PageControls] 
     - PopupBatchEntry.ascx 

我已經加入jQuery的母版頁,像這樣:

<link href="../App_Themes/Default/Style.css" rel="stylesheet" type="text/css" /> 
<link href="../JavaScripts/jquery-ui.css" rel="stylesheet" type="text/css" /> 
<script src="../JavaScripts/jquery.min.js" type="text/javascript"></script> 
<script src="../JavaScripts/jquery-ui.min.js" type="text/javascript"></script> 

我已經加入了jQuery用戶控制像這樣:

<script src="../../JavaScripts/jquery.min.js" type="text/javascript"></script> 
<script src="../../JavaScripts/jquery-ui.min.js" type="text/javascript"></script> 

即時試圖打開日期選擇器的文本框是在用戶控制

<asp:GridView ID="gvBatchDetails" runat="server" AutoGenerateColumns="False" EnableModelValidation="True"> 
            <Columns> 

             <asp:TemplateField HeaderText="Use By"> 
              <EditItemTemplate> 
               <asp:TextBox ID="txtUseBy" runat="server" Text='<%# Bind("UseBy", "{0:dd/MM/yyyy}") %>' 
                Width="80px" CssClass="datePicker"></asp:TextBox> 
               <%--            <cc1:CalendarExtender ID="txtUseBy_CalendarExtender" runat="server" 
                Enabled="True" Format="dd/MM/yyyy" TargetControlID="txtUseBy"> 
               </cc1:CalendarExtender>--%> 
               <asp:RequiredFieldValidator ID="valSellByReq" runat="server" ControlToValidate="txtUseBy" 
                ErrorMessage="* Required" Display="Dynamic"></asp:RequiredFieldValidator> 
              </EditItemTemplate> 
              <ItemTemplate> 
               <asp:Label ID="Label3" runat="server" Text='<%# Bind("UseBy", "{0:dd/MM/yyyy}") %>'></asp:Label> 
              </ItemTemplate> 
              <HeaderStyle HorizontalAlign="Left" /> 
              <ItemStyle HorizontalAlign="Left" /> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="Sell By"> 
              <EditItemTemplate> 
               <asp:TextBox ID="txtSellBy" runat="server" Text='<%# Bind("SellBy", "{0:dd/MM/yyyy}") %>' 
                Width="80px" CssClass="datePicker"></asp:TextBox> 
               <%--            <cc1:CalendarExtender ID="txtSellBy_CalendarExtender" runat="server" Enabled="True" 
                Format="dd/MM/yyyy" TargetControlID="txtSellBy"> 
               </cc1:CalendarExtender>--%> 
               <asp:RequiredFieldValidator ID="valSellByRequired" runat="server" ControlToValidate="txtSellBy" 
                ErrorMessage="* Required" Display="Dynamic"></asp:RequiredFieldValidator> 
              </EditItemTemplate> 
              <ItemTemplate> 
               <asp:Label ID="Label4" runat="server" Text='<%# Bind("SellBy", "{0:dd/MM/yyyy}") %>'></asp:Label> 
              </ItemTemplate> 
              <HeaderStyle HorizontalAlign="Left" /> 
              <ItemStyle HorizontalAlign="Left" /> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="Quantity Delivered"> 
              <EditItemTemplate> 
               <asp:TextBox ID="txtQuantityDelivered" runat="server" Text='<%# Bind("QuantityDelivered") %>' 
                Width="75px"></asp:TextBox> 
               <asp:RequiredFieldValidator ID="valQuantityRequired" runat="server" ControlToValidate="txtQuantityDelivered" 
                ErrorMessage="* Required" Display="Dynamic"></asp:RequiredFieldValidator> 
               <asp:RangeValidator ID="valQuantityRange" runat="server" ControlToValidate="txtQuantityDelivered" 
                ErrorMessage="* Invalid" MinimumValue="0" Type="Double" CultureInvariantValues="True" 
                Display="Dynamic"></asp:RangeValidator> 
              </EditItemTemplate> 
              <ItemTemplate> 
               <asp:Label ID="Label5" runat="server" Text='<%# Bind("QuantityDelivered") %>'></asp:Label> 
              </ItemTemplate> 
              <HeaderStyle HorizontalAlign="Right" /> 
              <ItemStyle HorizontalAlign="Right" /> 
             </asp:TemplateField> 
             <asp:TemplateField ShowHeader="False"> 
              <EditItemTemplate> 
               <table class="BorderlessTable"> 
                <tr> 
                 <td> 
                  <asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Update" 
                   Text="Update" /> 
                 </td> 
                 <td> 
                  <asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" 
                   Text="Cancel" /> 
                 </td> 
                </tr> 
               </table> 
              </EditItemTemplate> 
              <ItemTemplate> 
               <table class="BorderlessTable"> 
                <tr> 
                 <td> 
                  <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandName="Edit" 
                   Text="Edit" /> 
                 </td> 
                 <td> 
                  <asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Delete" 
                   Text="Delete" /> 
                 </td> 
                </tr> 
               </table> 
              </ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
           </asp:GridView> 

,最後用打開文本框到日期選擇器(用戶控件)jQuery的IM:

//Configure dates when the page is loaded 
$(document).ready(configureDates); 

//Add handler toend request 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(configureDates); 

//Configure all date picker text boxes 
function configureDates() { 

    var datePickers = $('.datePicker'); 

    if ($(datePickers).length > 0) { 
     $(datePickers).datepicker({ dateFormat: "dd/mm/yy" }); <--- ERROR IS HERE 
    } 
} 

任何人都可以看到的是:一個GridView控件(日期選擇器CSS類)中這個錯誤?我認爲這可能與jQuery文件的路徑有關,具體取決於當前上下文是在頁面文件夾還是Web控制文件夾中。

+0

jQuery完全有能力處理選擇器不返回任何元素的情況 - 這樣做看起來好像不會讓你獲得任何東西,並且使代碼複雜化。 –

+0

@Anthony Grist - 謝謝,我補充說,因爲我最初認爲這是造成這個問題(文本框在編輯模板,並不存在第一頁加載)。感謝您的確認 – WraithNath

+0

說實話,我認爲你原來以爲這是jQuery UI導入問題很可能是正確的。那,或者不管什麼原因你的jQuery UI .js文件不包括datePicker代碼。您是否在使用從同一個.js文件導入的方法的同一頁面中有任何其他代碼? –

回答

1

使用ResolveUrl您的腳本和CSS裁判:

<link href='<%= Page.ResolveUrl("~/App_Themes/Default/Style.css")%>' rel="stylesheet" type="text/css" /> 
<link href='<%= Page.ResolveUrl("~/JavaScripts/jquery-ui.css")%>' rel="stylesheet" type="text/css" /> 
<script src='<%= Page.ResolveUrl("~/JavaScripts/jquery.min.js")%>' type="text/javascript"></script> 
<script src='<%= Page.ResolveUrl("~/JavaScripts/jquery-ui.min.js")%>' type="text/javascript"></script> 


//Configure all date picker text boxes 
function configureDates() { 

    $('.datePicker').datepicker("option", "dateFormat", "dd/mm/yy"); 

} 
+0

嗨裏克,在主或用戶控制? - 他們將解析不同的路徑,當查看頁面的源時,只有其中一個引用被添加到每個js文件 – WraithNath

+0

您可以將它們添加到任何地方,只要您使用ResolveUrl,它們將自動解析,您可能必須使用Control.ResolveUrl 。 –

+0

你不需要多次引用,每頁只有一個引用,所以如果你在MasterPage中有它們,你不需要它們在控件中。 –

0

$(datePickers)是一個列表。什麼應該工作是一樣的東西

$('.datePicker').each(function(idx, obj) { 
    $(obj).datepicker({ dateFormat: "dd/mm/yy" }); 
}); 
+0

嗨,彼得,我還添加了一個標準的文本框與CSS類的頁面,並得到了相同的錯誤 – WraithNath

0

我覺得應該是:

如果(datePickers.length> 0){ datePickers .datepicker({dateFormat:「dd/mm/yy」});
+0

嗨Sudhir,謝謝,但仍然不工作!代碼更改爲var datePickers = $('。datePicker'); (datePickers.length> 0){ if(datePickers.length> 0){datePickers.datepicker({dateFormat:「dd/mm/yy」}); } – WraithNath

相關問題