2009-09-04 9 views
0

私は3つのコントロールを使用してユーザーが日付を指定できるWebページを持っています:月と日の2つのドロップダウンコントロール(Jan = 1、おそらく悪い選択:-))と月の日数(1-31)。テキストボックスはその年に使用されます。 The Yearのテキストボックスでは、AJAX Toolkit Watermarkエクステンダーを使用して[ここ] [1]文字通りの単語「年」をテキストボックスの明るい灰色で書いています。このテキストは、ユーザーがフォーカスをテキストボックスに設定すると消えます。ユーザーがテキストボックスに何かを入力すると、テキストは通常​​のテキストボックスの色で表示されます。そうでない場合は、テキストボックスのフォーカスが失われたときに明るい灰色のテキスト「年」が表示されます。ASP.NET Ajaxツールキットウォーターマークコントロールの問題とJavaScriptの日付の質問

3コントロールは「発行日」テキストボックスを構成し、同様に3つのコントロールがコントロールの「有効期限」セットを構成します。

ユーザーが発行日を変更した場合(最後のコントロールの発行年が失われた場合など)、有効期限コントロールを発行日から10年間の日付値に更新したい。

問題がこれです:txtExpireYearコントロールの値を設定するためにJavascriptを使用すると、普通のテキストで値を表示するのではなく、年の値に通常「年」と書かれている明るい灰色の文字透かしテキストを更新しますあなたが入力したかのように値を扱います。

2番目の問題は、IssueDateの年の値を取得することです。なぜdtmDateOfIssue.getYear()関数が2桁の数字を返すのですか?年が< 2000の場合はar、年が2000より大きい場合は4桁の年を返します。私はおそらくこれを回避することができますが、私は説明を探しています。

ありがとうございます。各日付グループの

 function txtIssueYear_OnBlur() { 

      //Get sub controls of passport Expiration date 
      var ddlExpireMonth = document.getElementById("dtmPassportExpirationDate_ddlMonth"); 
      var ddlExpireDate = document.getElementById("dtmPassportExpirationDate_ddlDate"); 
      var txtExpireYear = document.getElementById("dtmPassportExpirationDate_txtYear"); 

      //Get the individual values of each sub control of the Expiration date 
      var ExpireMonth = parseInt(ddlExpireMonth.value); 
      var ExpireDayOfMonth = parseInt(ddlExpireDate.value); 
      var ExpireYear = parseInt(txtExpireYear.value); 

      //If the Expiration Date still contains all the default values, set it to a default 
     //value based on the value of the Date of Issue 
      if (ExpireMonth == -1 && ExpireDayOfMonth == -1 && (isNaN(ExpireYear))) { 

       //Get sub controls of passport Issue date 
       var ddlIssueMonth = document.getElementById("dtmPassportDateOfIssue_ddlMonth"); 
       var ddlIssueDate = document.getElementById("dtmPassportDateOfIssue_ddlDate"); 
       var txtIssueYear = document.getElementById("dtmPassportDateOfIssue_txtYear"); 

       //Get the individual values of each sub control of the Issue date 
       var IssueMonth = parseInt(ddlIssueMonth.value); 
       var IssueDayOfMonth = parseInt(ddlIssueDate.value); 
       var IssueYear = parseInt(txtIssueYear.value); 

       var dtmDateOfIssue = new Date(IssueYear, IssueMonth - 1, IssueDayOfMonth); //construct Issue date 

       //add 10 years - 1 day to get the default Expiration date 
       dtmDateOfIssue.setYear(dtmDateOfIssue.getYear() + 10); 
       dtmDateOfIssue.setDate(dtmDateOfIssue.getDate() - 1); 

       //Set the Expiration Date 
       txtExpireYear.value = dtmDateOfIssue.getYear(); 
       ddlExpireMonth.value = dtmDateOfIssue.getMonth() + 1; 
       ddlExpireDate.value = dtmDateOfIssue.getDate(); 
      } 

3つのコントロールは、ユーザーコントロール(ASCXファイル)に含まれる:

<asp:DropDownList ID="ddlMonth" runat="server"> 
    </asp:DropDownList> 
    <asp:DropDownList ID="ddlDate" runat="server"> 
    </asp:DropDownList> 
    <asp:TextBox ID="txtYear" runat="server" Width="85px" ></asp:TextBox>    
    <asp:CustomValidator ID="CustomValidator1" runat="server" 
     EnableClientScript="true" Required="True" 
     ErrorMessage="CustomValidator" ClientValidationFunction="validateDate" 
     ValidateEmptyText="True"></asp:CustomValidator> 

これは、以下のようにブラウザに送信されます。クライアントサイドスクリプトはページ固有のため、Javascriptを記述しているイベントハンドラはクライアントサイドIDを使用することに注意してください。それが明確か、あなたに合っているかどうかは分かりません。最終的なクライアント側の名前を使用した例が好きですが、もう一度<% - servercontrol.ClientId%>アプローチを提供したい場合は、試してみてください。

感謝!あなたの第二の問題について

<select name="dtmPassportExpirationDate$ddlMonth" id="dtmPassportExpirationDate_ddlMonth" class="DefaultDropDown"> 
<option value="-1">--Month--</option> 
<option value="1">Jan</option> 
<option value="2">Feb</option> 
<option value="3">Mar</option> 
<option value="4">Apr</option> 
<option value="5">May</option> 
<option value="6">Jun</option> 
<option value="7">Jul</option> 
<option value="8">Aug</option> 
<option selected="selected" value="9">Sep</option> 
<option value="10">Oct</option> 
<option value="11">Nov</option> 
<option value="12">Dec</option> 

<select name="dtmPassportExpirationDate$ddlDate" id="dtmPassportExpirationDate_ddlDate" class="DefaultDropDown"> 
<option value="-1">--Day--</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option selected="selected" value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
<option value="10">10</option> 
<option value="11">11</option> 
<option value="12">12</option> 
<option value="13">13</option> 
<option value="14">14</option> 
<option value="15">15</option> 
<option value="16">16</option> 
<option value="17">17</option> 
<option value="18">18</option> 
<option value="19">19</option> 
<option value="20">20</option> 
<option value="21">21</option> 
<option value="22">22</option> 
<option value="23">23</option> 
<option value="24">24</option> 
<option value="25">25</option> 
<option value="26">26</option> 
<option value="27">27</option> 
<option value="28">28</option> 
<option value="29">29</option> 
<option value="30">30</option> 
<option value="31">31</option> 

<input name="dtmPassportExpirationDate$txtYear" type="text" value="2009" maxlength="4" id="dtmPassportExpirationDate_txtYear" class="DefaultTextBox" style="width:68px;" /> 


<input name="dtmPassportExpirationDate$btnClear" type="button" id="dtmPassportExpirationDate_btnClear" style="font-size: x-small; height: 20px;" value="Clear" tabindex="-1" onClick="ClearDate_dtmPassportExpirationDate();" /></td> 

<input type="hidden" name="dtmPassportExpirationDate$TextBoxWatermarkExtender1_ClientState" id="dtmPassportExpirationDate_TextBoxWatermarkExtender1_ClientState" /> 

答えて

0

getYear機能は廃止され、代わりにgetFullYear機能を使用する必要があります。

編集:が正しくTextBoxWatermarkの値がコントロールを拡張し、あなたがオブジェクトを取得し、set_Text機能を呼び出すためにMSのAjax $find機能を使用する必要があります設定するには:

$find("ctl00_SampleContent_TextBoxWatermarkExtender2").set_Text('value'); 

またはより良いサーバ - を使用してコントロールのサイドClientIDプロパティ:それは恥のトンだから

$find("<%=ExtenderControl.ClientID%>").set_Text('value'); 

私は、Firebugの持つオブジェクトの検査によってset_Text機能を見つけました帽子には、Ajax Control ToolkitのクライアントサイドAPIのno documentationがあります...

+0

私はJavascriptのルーキーです.JQueryを使用したことがなく、リファレンスを設定する方法もわかりません。 PLZの代わりにまっすぐなJavascriptの例を教えてもらえますか? – ChadD

+0

私はこれを試しました: var txtExpireYearWatermarkExtender = document.getElementById( "dtmPassportExpirationDate_TextBoxWatermarkExtender1_ClientState"); \t txtExpireYearWatermarkExtender.attributes( "text")= dtmDateOfIssue.getFullYear(); ..ですが、textプロパティはエクステンダオブジェクトにありません – ChadD

+0

jQueryはここで何もしません。$ find関数はMS Ajaxに由来し、ASP .NETコントロールのクライアント側オブジェクト表現を取得するために使用されます。 set_Text関数は、TextBoxWaterMarkExtenderコントロールのクライアント側API上の関数です。 – CMS