Подтвердить что ты не робот

JQuery DatePicker - изменяет minDate и maxDate на лету

У меня проблема с jQuery Datepicker. Я могу легко добавить диапазон дат, но я хочу, чтобы диапазон выбора изменялся в зависимости от события, которое выбрал пользователь.

Таким образом, если они выбирают событие №1, они могут выбирать даты только из диапазона дат события # 1.

Я написал небольшую небольшую функцию, которая вызывается всякий раз, когда пользователь выбирает новое событие, но только когда-либо показывает первоначально установленные значения minDate/maxDate.

function datepicker(startDate, endDate) {
  $( "#date" ).datepicker({
    inline: true,
    minDate: new Date(startDate),
    maxDate: new Date(endDate),
    dateFormat: 'dd/mm/yy' 
  });
}

Я попробовал позвонить $('#date').datepicker('remove');, прежде чем вызывать указанную выше функцию, чтобы увидеть, создает ли он новый экземпляр с правильными датами, но он не работает.

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

4b9b3361

Ответ 1

У вас есть несколько вариантов...

1) Вам нужно вызвать метод destroy() не remove(), поэтому...

$('#date').datepicker('destroy');

Затем вызовите ваш метод для воссоздания объекта datepicker.

2) Вы можете обновить свойство существующего object через

$('#date').datepicker('option', 'minDate', new Date(startDate));
$('#date').datepicker('option', 'maxDate', new Date(endDate));

или...

$('#date').datepicker('option', { minDate: new Date(startDate),
                                  maxDate: new Date(endDate) });

Ответ 2

В зависимости от/на сегодняшний день, вот как я применил ограничение дат, основанное на дате, введенной в другой datepicker. Работает очень хорошо:

function activateDatePickers() {
    $("#aDateFrom").datepicker({
        onClose: function() {
            $("#aDateTo").datepicker(
                    "change",
                    { minDate: new Date($('#aDateFrom').val()) }
            );
        }
    });
    $("#aDateTo").datepicker({
        onClose: function() {
            $("#aDateFrom").datepicker(
                    "change",
                    { maxDate: new Date($('#aDateTo').val()) }
            );
        }
    });
}

Ответ 3

$(document).ready(function() {
$("#aDateFrom").datepicker({
    onSelect: function() {
        //- get date from another datepicker without language dependencies
        var minDate = $('#aDateFrom').datepicker('getDate');
        $("#aDateTo").datepicker("change", { minDate: minDate });
    }
});

$("#aDateTo").datepicker({
    onSelect: function() {
        //- get date from another datepicker without language dependencies
        var maxDate = $('#aDateTo').datepicker('getDate');
        $("#aDateFrom").datepicker("change", { maxDate: maxDate });
    }
});
});

Ответ 4

Я знаю, что вы используете Datepicker, но для некоторых людей, которые используют только дату ввода HTML5, как я, есть пример того, как вы можете сделать то же самое: ссылка JSFiddle

$('#start_date').change(function(){
  var start_date = $(this).val();
  $('#end_date').prop({
    min: start_date
  });
});


/*  prop() method works since jquery 1.6, if you are using a previus version, you can use attr() method.*/