Как заполнить + одну дату года из другого текстового поля текущего текстового поля - PullRequest
0 голосов
/ 26 августа 2009

У меня есть два текстовых поля в моем коде vb.net

    <tr>
    <td align="right">
        <b>ActivationReqDT:</b>
    </td>
    <td>
        <asp:TextBox ID="ActivationReqDTTextBox" runat="server" Text='<%# Bind("ActivationReqDT","{0:dd/MM/yyyy}") %>' />                       
    </td>
</tr>

<tr>
    <td align="right">
        <b>DeactivationReqDT:</b>
    </td>
    <td>
        <asp:TextBox ID="DeactivationReqDTTextBox" runat="server" Text='<%# Bind("DeactivationReqDT","{0:dd/MM/yyyy}") %>' />
    </td>
</tr>

Я хочу, чтобы при вводе даты в дд / мм / гггг в первом текстовом поле ( ActivationReqDTTextBox ) автоматически заполняло второе текстовое поле ( DeactivationReqDTTextBox ), добавив плюс один год к указанной выше дате.

пожалуйста, предоставьте свое решение с помощью javascript, jquery или vb.net

Спасибо.

С наилучшими пожеланиями, MS

1 Ответ

2 голосов
/ 26 августа 2009

Я не уверен, что даже если вы хотите, чтобы это срабатывало, поэтому я предполагаю, что вы, возможно, захотите заполнить следующее поле после того, как первое потеряет фокус. Вы можете настроить это в соответствии со своими потребностями, изменив событие на keyup, change или любое другое.

$('#ActivationReqDTTextBox').blur(function () {
    var myDate = new Date(Date.parse($(this).val()));
    myDate.setYear(myDate.getYear() + 1);
    $('#DeactivationReqDTTextBox').val(myDate);
});

Несколько вещей, о которых следует знать:

  • вы должны убедиться, что ваш формат даты совместим с Date.parse, а если это не так, вам нужно переформатировать его перед использованием
  • вы также можете отформатировать дату результата

Date.parse ожидает ММ / ДД / ГГГГ, и в вашем случае это ДД / ММ / ГГГГ, поэтому вам нужно поменять месяц с днем. Это сделает свое дело:

function reformat(a) {
    return a.substring(3,5) + '/' + a.substring(0,2) + a.substring(5, 10);
}

Учитывая, что модифицированный код сверху должен выглядеть следующим образом.

$('#ActivationReqDTTextBox').blur(function () {
        var myDate = new Date(Date.parse(reformat($(this).val())));
        $('#DeactivationReqDTTextBox').val(myDate.getDate() + '/' + 
            (myDate.getMonth() + 1) + '/' + (myDate.getYear() + 1));
});

EDIT:

Чтобы убедиться, что скрипт не запускается при вводе неверной даты в первом поле, вы можете сделать это:

$('#ActivationReqDTTextBox').blur(function () {
    var value = $(this).val();
    var regex = /^\d{2}\/\d{2}\/\d{4}$/;
    if (regex.test(value)) {
        var myDate = new Date(Date.parse(reformat(value)));
        $('#DeactivationReqDTTextBox').val(myDate.getDate() + '/' + 
            (myDate.getMonth() + 1) + '/' + (myDate.getYear() + 1));
    } else {
        alert('invalid date');
        // this will prevent from leaving the input until the date is correct
        $(this).focus();
    }
});

РЕДАКТИРОВАТЬ # 2:

Еще одно обновление кода. Это предотвратит ведущие нули на месяцы и дни.

$('#ActivationReqDTTextBox').blur(function () {
    var value = $(this).val();
    var regex = /^\d{2}\/\d{2}\/\d{4}$/;
    if (regex.test(value)) {
        var myDate = new Date(Date.parse(reformat(value)));
        var year = myDate.getYear() + 1;
        var month = myDate.getYear() + 1;
        if (month < 10) {
            month = '0' + month;
        }
        var day = myDate.getDate();
        if (day < 10) {
            day = '0' + day;
        }
        $('#DeactivationReqDTTextBox').val(day + '/' + month + '/' + year);
    } else {
        alert('invalid date');
        // this will prevent from leaving the input until the date is correct
        $(this).focus();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...