JQuery DATE RANGE: Как вызвать событие init «selection» для установки значений по умолчанию - PullRequest
2 голосов
/ 05 февраля 2012

Похоже, что это упущение из DatePicker JQ_ui, но, возможно, у somebod есть ответ.

Мне нужно два входа для каждого с указателем даты при нажатии / фокусировке.

Каждый входной результат связан с другим, НО ОДНАКО, второй не является обязательным вводом даты.

При использовании примера кода JQ_ui DATE RANGE ( ниже ) Кажется, все работает очень хорошо.Я даже могу добавить много опций, чтобы немного украсить все это.

Поэтому, делая так, чтобы любой ввод заполнялся выбранной датой выбора, он сигнализирует / подготавливает другой сборщик даты (, когда он появляется, если сфокусирован ) для отображения ограничений на доступные даты.Это именно то, что ожидается, и в этот момент очень полезный виджет.

ТОГДА приходит вниз .Когда страница формы отображается повторно ( сейчас или в будущем ), предыдущие поля должны появиться в полях ввода для справки / проверки / исправления.

Применяя сохраненные значения ко входуполя через $ (function () {$ ("# gmtTxt1"). datepicker ("setDate", '$ Dst1') и т. д. вышеупомянутая функция перекрестного ввода потеряна, пока один из средств выбора даты ВРУЧНО не используется для выбора другого или повторного выбората же дата с помощью средства выбора. Даже жесткое кодирование, встраивание сохраненных значений по умолчанию в страницу повторно отображаемой формы заполняет их.

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

К вашему сведению - пример кода JQ_UI Date Range ( незначительные изменения идентификатора элемента ), на котором я основываю свои тесты ...

$(function() {
    var dates = $( "#first, #second" ).datepicker({
        //defaultDate: "+1w",   // n/a, many other options work ok to dress it up
        changeMonth: true,
        numberOfMonths: 1,
        onSelect: function( selectedDate ) {
            var option = this.id == "first" ? "minDate" : "maxDate",
            instance = $( this ).data( "datepicker" ),
            date = $.datepicker.parseDate(
                instance.settings.dateFormat || $.datepicker._defaults.dateFormat,
                selectedDate, instance.settings
            );
            dates.not( this ).datepicker( "option", option, date );
        }
    });
});

ThaNKS для вашего рассмотрения.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Похоже, решение довольно простое.

Из материала, который я наконец нашел в stackoverflow ( вздох; часы поиска ), я сначала собрал следующее ...

$(document).ready(
    $(function(){
        var doDate;
        if($("#Text1").val()){
            doDate = new Date(Date.parse($("#Text1").datepicker('getDate')));
            $("#Text2").datepicker('option', 'minDate', doDate);
        }
        if($("#Text2").val()){
            doDate = new Date(Date.parse($("#Text2").datepicker('getDate')));
            $("#Text1").datepicker('option', 'maxDate', doDate);
        }
    })
);

... что, кажется, работает отлично, хотя, если кто-нибудь обнаружит ошибки в не совсем новых браузерах и даст нам всем понять, это будет полезно; У меня нет этих ресурсов .

Помещенный в именованную функцию ее также можно вызывать с помощью ( после ) сброса формы ( onClick ) и средства выбора Событие ручного редактирования .change (, которое проверяет формат и сбрасывает ввод, если произошла ошибка ).

Это изумительный сайт с фантастическими авторами. С уважением.

0 голосов
/ 05 февраля 2012

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

$(function() {
    var formatDP = function( selectedDate ) {
            var option = this.id == "first" ? "minDate" : "maxDate",
            instance = $( this ).data( "datepicker" ),
            date = $.datepicker.parseDate(
                instance.settings.dateFormat || $.datepicker._defaults.dateFormat,
                selectedDate, instance.settings
            );
            dates.not( this ).datepicker( "option", option, date );
        };
    var dates = $( "#first, #second" ).datepicker({
        //defaultDate: "+1w",   // n/a, many other options work ok to dress it up
        changeMonth: true,
        numberOfMonths: 1,
        create: formatDP,
        onSelect: formatDP
    });
});
...