Я не уверен, что даже если вы хотите, чтобы это срабатывало, поэтому я предполагаю, что вы, возможно, захотите заполнить следующее поле после того, как первое потеряет фокус. Вы можете настроить это в соответствии со своими потребностями, изменив событие на 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();
}
});