У меня есть веб-страница, которая использует три элемента управления, чтобы пользователь мог указать дату: два элемента управления вниз для месяца и дня (где 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" />
Я новичок в Javascript и никогда не использовал JQuery и не знаю, как установить ссылку на него. Можете ли вы предоставить мне пример с прямым Javascript вместо PLZ? – ChadD
Я пробовал это: var txtExpireYearWatermarkExtender = document.getElementById ("dtmPassportExpirationDate_TextBoxWatermarkExtender1_ClientState"); \t txtExpireYearWatermarkExtender.attributes ("text") = dtmDateOfIssue.getFullYear(); .. но свойство text не найдено на объекте-расширителе – ChadD
jQuery здесь не имеет никакого отношения, функция $ find находится от MS Ajax и используется для получения объектного представления элементов управления ASP.NET на стороне клиента, set_Text, является функцией на клиентском интерфейсе элементов управления TextBoxWaterMarkExtender. – CMS