Как отключить даты до сегодняшнего дня в JQuery DatePicker - PullRequest
5 голосов
/ 10 августа 2011

Как отключить даты до сегодняшнего дня в jQuery datepicker БЕЗ использования minDate: 0?

Я хотел бы включить навигацию по календарю, как обычно до сегодняшнего дня, при этом убедившись, что пользовательНЕ выбирайте даты до сегодняшнего дня.

(то есть, скажем, сегодняшняя дата - 11 августа, и я хотел бы, чтобы все даты до этого были отключены, но все же позволяли пользователю переходить на предыдущие месяцы, годы и т. д.)

Ответы [ 5 ]

6 голосов
/ 10 августа 2011

Хотя я согласен, что это странное поведение, вы можете подделать его, используя событие onSelect DatePicker.

$(document).ready(function() {
    $('#Date').datepicker({
        onSelect: function(dateText, inst) {
            //Get today's date at midnight
            var today = new Date();
            today = Date.parse(today.getMonth()+1+'/'+today.getDate()+'/'+today.getFullYear());
            //Get the selected date (also at midnight)
            var selDate = Date.parse(dateText);

            if(selDate < today) {
                //If the selected date was before today, continue to show the datepicker
                $('#Date').val('');
                $(inst).datepicker('show');
            }
        }
    });
});

По сути, вы обрабатываете onSelect событие.

Когда выбрана дата, проверьте, не наступила ли она до сегодняшней даты.

Если равно , вы немедленно покажете средство выбора даты снова и очистите поле ввода, прикрепленное к нему.


Обновлено Пример кода теперь полностью функционален.Вот jsfiddle для демонстрации.

3 голосов
/ 22 июня 2012

Надеюсь, это еще кому-нибудь пригодится. Мое решение состоит в том, чтобы поставить чеки на отдельные даты, как это:

$("#StartDate").datepicker({ dateFormat: 'yy-mm-dd',  beforeShowDay: NotBeforeToday});



function NotBeforeToday(date)
{
    var now = new Date();//this gets the current date and time
    if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() > now.getDate())
        return [true];
    if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth())
       return [true];
     if (date.getFullYear() > now.getFullYear())
       return [true];
    return [false];
}

Я считаю это простым и элегантным

2 голосов
/ 21 декабря 2017

простейшее решение может ....

<script type="text/javascript">$('#date').datepicker({ minDate: 0 });</script>
1 голос
/ 17 сентября 2012

Вместо этого вы можете написать функцию в вашем файле .js следующим образом:

$(function () {

             var date = new Date();
             var currentMonth = date.getMonth();
             var currentDate = date.getDate();
             var currentYear = date.getFullYear();

            if($("#dateToSelect").length > 0){
                $("#dateToSelect").datepicker({
                 maxDate: new Date(currentYear, currentMonth, currentDate)
             });
            }
})

Здесь «dateToSelect» - это идентификатор поля, в котором отображается дата. Проверка длины даты здесь не обязательна.

1 голос
/ 10 августа 2011

Похоже, что не настраивается.В строке 1434 файла jquery.ui.datepicker.js , если указано maxDate, она устанавливает переменную maxDraw и рисует до месяца с этой датой, без учета других флагов.

Но я тоже согласен с zzzzBov.Зачем пользователю нужно видеть значения, которые он не может выбрать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...