2009-09-04 2 views
0

У меня есть веб-страница, которая использует три элемента управления, чтобы пользователь мог указать дату: два элемента управления вниз для месяца и дня (где Jan = 1, возможно, плохо выбор :-)) и дни месяца (1-31). Текстовое поле используется в течение года. В текстовом поле «Год» я использую расширитель водяного знака AJAX Toolkit, найденный [здесь] [1], чтобы написать буквальное слово «Год» в сером цвете в текстовом поле. Этот текст исчезает, когда пользователь устанавливает фокус на текстовое поле. Если пользователь вводит что-либо в текстовое поле, текст отображается в обычном текстовом поле, иначе светло-серый текст «Год» снова появляется, когда текстовое поле теряет фокус.ASP.NET Ajax Toolkit Проблема с водяным знаком и вопрос по дате javascript

3 элемента управления составляют текстовое поле «Дата выдано» и аналогичным образом, еще 3 элемента управления составляют набор элементов «Срок действия».

Когда пользователь изменяет дату выпуска (например, потеря последнего элемента управления, выпущенного года, утрачена, я хотел бы обновить элементы Дата истечения срока действия до значения даты, которое составляет 10 лет с даты выпуска .

Проблема заключается в следующем: если я использую Javascript для установки значения элемента управления txtExpireYear, он обновляет текст водяного знака светлого серого текста, который обычно указывает «Год» на значение номера года вместо того, чтобы отображать значение в обычном тексте цвет и обработку значения, как если бы он был набран пользователем.

Вторая проблема, которая у меня есть, - получение значения года IssueDate. Почему функция dtmDateOfIssue.getYear() возвращает двузначную позицию ar, если год < 2000 и itherwise возвращают 4-значный год, если год> 2000? Возможно, я смогу обойти это, но я ищу объяснения.

Заранее спасибо.

 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 управляет каждой даты группы включены в UserControl (файл 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 для использования идентификаторов на стороне клиента, потому что клиентский скрипт является специфичным для страницы. Не уверен, что это будет ясно или будет иметь смысл для вас. Я бы предпочел пример с использованием имен конечных клиентов, но если вы снова захотите предложить подход <% - 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 вместо этого.

Edit: Чтобы правильно установить значение расширенного управления TextBoxWatermark, вы должны использовать MS Ajax $find функцию, чтобы получить объект и вызвать функцию set_Text:

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

или лучше, используя поддерживаемый сервер сторона ClientID свойство управления:

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

Я нашел set_Text функцию путем осмотра объекта с Firebug, потому что это позор, т есть no documentation клиентского интерфейса Ajax Control Toolkit ...

+0

Я новичок в Javascript и никогда не использовал JQuery и не знаю, как установить ссылку на него. Можете ли вы предоставить мне пример с прямым Javascript вместо PLZ? – 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. – CMS

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