2011-12-06 11 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のイム:GridViewの(日付ピッカーCSSクラス):内

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

誰であるかを見ることができますこれは間違っていますか?現在のコンテキストがページフォルダにあるのか、Webコントロールフォルダにあるのかに応じて、jQueryファイルへのパスで行うことができると思っていました。

+0

jQueryは、セレクタが要素を返さないケースを完全に処理することができます。自分で行うと、何も得られず、コードが複雑になるようです。 –

+0

@Anthony Grist - ありがとう、私は最初にそれが問題を引き起こしていると思ったので、私はそれを追加しました(テキストボックスは編集テンプレートにあり、最初のページの読み込みには存在しません)。確認のお礼あり – WraithNath

+0

正直言って、jQuery UIのインポートに問題があるというあなたの元々の考えは正しいと思います。つまり、何らかの理由でjQuery UI .jsファイルにdatePickerコードが含まれていません。同じ.jsファイルからインポートされたメソッドを使用している同じページに他のコードがありますか? –

答えて

1

使用ResolveUrlのようなものです:

<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

こんにちは、リック、マスターまたはユーザーコントロールですか? - 彼らは別のパスを解決し、ページのソースを表示するときに参照の1つだけがjsファイルごとに追加されます – WraithNath

+0

ResolveUrlを使用している限り、どこにでも追加できます。自動的に解決されるため、Control.ResolveUrl 。 –

+0

複数の参照は必要ありません。ページごとに1つのみであるため、MasterPageで参照がある場合は、コントロールにそれらを必要としません。 –

0

$(datePickers)です。どのような仕事べきことは、スクリプトやCSSレフリーのため

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

こんにちはPieter、私はまた、cssクラスのページに標準のテキストボックスを追加し、同じエラーが発生しました – WraithNath

0

私はそれがあるべきだと思う:

(datePickers.length> 0){ datePickers場合.datepicker({dateFormat: "dd/mm/yy"});
+0

こんにちはSudhir、ありがとうが、まだ動作していない!コードがvarに変更されましたdatePickers = $( '。datePicker'); if(datePickers.length> 0){ datePickers.datepicker({dateFormat: "dd/mm/yy"}); } – WraithNath

関連する問題