#javascript #jquery #jquery-ui-datepicker
Вопрос:
У меня есть input
текст поля, который доступен только для чтения. Я использую его для отображения квартала года. У меня есть еще одно поле ввода, которое является датой начала. Я использую jQuery datepicker для выбора даты.
Моя проблема в том, что значение поля ввода за квартал Q1
, то, если я выберу дату начала за пределами 1 квартала, мне нужно отобразить сообщение под ним, в котором говорится::
Выбранная дата начала не входит в квартал
Как я могу это сделать?
var datePickerOptions = {
dateFormat: 'dd-M-yy',
changeMonth: true,
changeYear: true
}
/* Initialise the date picker */
if (!$.datepicker.initialized) {
$(document).mousedown($.datepicker._checkExternalClick)
.find(document.body).append($.datepicker.dpDiv);
$.datepicker.initialized = true;
}
$(function() {
$("#startdate").datepicker(datePickerOptions);
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Quartor: <input type="text" id="quartor" readonly value="Q1"></p>
<p>Start Date: <input type="text" id="startdate" placeholder="DD-MMM-YYYY"></p>
Ответ №1:
Для достижения этой цели вы можете подключиться к onSelect()
методу выбора даты. Там вы можете выполнить код, который использует простой расчет для определения квартала года с выбранной даты, и сравнить его со значением, введенным пользователем, примерно так:
let getQuarter = d => Math.ceil((d.getMonth() 1) / 3);
let datePickerOptions = {
dateFormat: 'dd-M-yy',
changeMonth: true,
changeYear: true,
onSelect: dateValue => {
let date = new Date(dateValue);
let dateQtr = 'Q' getQuarter(date);
let userQtr = $('#quartor').val().trim();
$('.qtr-warning').toggle(dateQtr != userQtr);
}
}
jQuery($ => {
$("#startdate").datepicker(datePickerOptions);
});
.qtr-warning {
color: #C00;
display: none;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Quartor: <input type="text" id="quartor" readonly value="Q1"></p>
<p>Start Date: <input type="text" id="startdate" placeholder="DD-MMM-YYYY"></p>
<span class="qtr-warning">The selected start date is not within the quarter</span>
Обратите внимание, что вы, возможно, захотите сделать сравнение более надежным, сделав его нечувствительным к регистру или проигнорировав Q
строку.
Комментарии:
1. Лучше использовать
$.datepicker.parseDate
вместоnew Date(dateValue)
этого .2.
getMonth()
возвращает месяц на основе 03. @SalmanA очень хорошая мысль
getMonth()
, спасибо. Обновленный.