Рассмотрим этот пример: http://jqueryui.com/datepicker/#date-range
Мы можем настроить ваш код так:
$(function() {
var dateFormat = 'dd.mm.yy';
function getDate(el) {
var date;
try {
date = $.datepicker.parseDate(dateFormat, el.value);
} catch (error) {
date = null;
}
return date;
}
function checkMinDate(el) {
var date = getDate(el);
var minDate = $(el).datepicker("option", "minDate");
var test;
try {
test = (date >= minDate);
} catch (error) {
test = false;
}
return test;
}
$(".datepicker").datepicker({
numberOfMonths: 1,
firstDay: 1,
changeMonth: true,
changeYear: true,
dateFormat: dateFormat,
minDate: 0
}).on("change", function(e) {
e.preventDefault();
var td = getDate(this);
var dpid = $(this).attr("id");
var dpi = parseInt(dpid.slice(dpid.indexOf("-") + 1));
$("#date-" + (dpi + 1)).prop("disabled", false).datepicker("option", {
minDate: td,
defaultDate: td
});
if (!checkMinDate(this)) {
this.value = "";
return false;
}
return true;
});
$(".datepicker:not(:eq(0))").prop("disabled", true);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
<div class="date-wrapper">
<div>
<label for="date1">Date 1:</label>
<input type="text" class="datepicker" id="date-1">
</div>
<div>
<label for="date2">Date 2:</label>
<input type="text" class="datepicker" id="date-2">
</div>
<div>
<label for="date3">Date 3:</label>
<input type="text" class="datepicker" id="date-3">
</div>
<div>
<label for="date3">Date 4:</label>
<input type="text" class="datepicker" id="date-4">
</div>
<div>
<label for="date3">Date 5:</label>
<input type="text" class="datepicker" id="date-5">
</div>
</div>
Я считаю, что это соответствует вашим критериям:
- Предыдущее поле даты должно быть меньше или «до» текущего поля даты.
- Все предыдущие даты должны быть меньше этого поля даты.
- Если дата изменяется, минимальная дата для следующих дат также должна быть обновлена.
Функция getDate()
получает элемент и определяет, содержит ли он дату в формате String (на основе формата даты), и возвращает объект Date, равный этой дате или null
.
Функция checkMinDate()
- помочь нам определить даты ручного ввода. Проверяет введенную вручную дату по значению minDate. Если оно больше или равно minDate
, оно вернет true. Если оно меньше minDate
, возвращается false.
В нашем обратном вызове change
мы используем .preventDefault()
, чтобы остановить текущее действие. Это полезно для событий типа, где мы хотим проверить, что было введено. Позже мы можем вернуть true
или false
, чтобы позволить событию развиваться. Если checkMinDate
не верно, мы можем очистить значение и вернуть false.
Надеюсь, это поможет!