jQueryUI datepicker - второй экземпляр мигает, а затем исчезает при вызове show () - PullRequest
1 голос
/ 09 августа 2011

У меня на странице есть два указателя даты jQueryUI.

Они инициализируются, как показано ниже:

jQuery("#departureDate").datepicker({
    beforeShow: function() {
        getDatesForCalendar("outbound");
    },
    numberOfMonths: 3,
    constrainInput: true,
    dateFormat: 'dd/mm/yy',
    showButtonPanel: false,
    hideIfNoPrevNext: true,
    onSelect: function(dateText, inst) { jQuery('#returnDate').datepicker("show");  } 
});


jQuery("#returnDate").datepicker({
    beforeShow: function() {
        getDatesForCalendar("return");
    },
    numberOfMonths: 3,
    constrainInput: true,
    dateFormat: 'dd/mm/yy',
    showButtonPanel: false,
    showOn: "focus",
    hideIfNoPrevNext: true,
    defaultDate: +1
});

Перед тем, как всплыть, они проверяют, какие даты им доступны, с помощью getDatesForCalendar (), который не содержит кода, который должен скрывать или отображать календари..

Моя проблема в том, что, когда первый календарь вызывает второй (что происходит при выборе), второй календарь мигает в течение секунды, а затем исчезает.Это проблема только для FF / Chrome, она не влияет на IE8.

Я пробовал несколько решений, включая изменение tabindex (теперь его вообще нет), отключение показа в фокусефункциональность, и, наконец, вместо ручного вызова datepicker ("show") я попытался вызвать focus () для поля, к которому он привязан.Ничего не помогло!

Любой совет будет очень оценен.

Большое спасибо,

Джек

Ответы [ 5 ]

8 голосов
/ 24 мая 2012

Вместо отображения указателя даты в onSelect используйте событие onClose.

jQuery("#departureDate").datepicker({

            numberOfMonths: 3,
            constrainInput: true,
            dateFormat: 'dd/mm/yy',
            showButtonPanel: false,
            hideIfNoPrevNext: true,
           onClose:function()
                 { 
               jQuery('#returnDate').datepicker('show');       
               }
        });


        jQuery("#returnDate").datepicker({

            numberOfMonths:3,
            constrainInput: true,
            dateFormat: 'dd/mm/yy',
            showButtonPanel: false,
            showOn: "focus",
            hideIfNoPrevNext: true,
           defaultDate: +1
        });​
1 голос
/ 25 марта 2014

Я только что получил ту же ошибку в jQuery UI 1.11.0.

Я нашел обходной путь, вызвав setTimeout в методе onSelect datepicker:

$('#arrival-date, #departure-date').datepicker({
    showAnim: 'slideDown',
    onSelect: function(dateText, inst){
        if($('#arrival-date').val() != '' && $(this).is('#arrival-date'))
        {
            setTimeout(function() {
                $('#departure-date').datepicker('show');
            }, 100);
        }
    }
});
1 голос
/ 30 января 2014

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

Как обойти эту проблему, я попробовал следующее, и это работает.

var checkin = $('#dpd1').datepicker({
    minDate:now,
    numberOfMonths:2,
    showOn: "button",
    buttonImage: "img/calender.png",
    buttonImageOnly: true,
    onSelect: function( selectedDate ) {
        var dateObject=new Date(selectedDate);
        dateObject.setDate(dateObject.getDate()+1); 
    $( "#dpd2" ).datepicker( "option", "minDate", dateObject );
    showSecond=true;
    },
    onClose: function( selectedDate ) {
        if(showSecond===true){
            $( "#dpd2" ).datepicker("show");
            showSecond=false;
        }
    }
});
1 голос
/ 09 августа 2011

Похоже, вам придется откатиться до jquery ui 1.7.3 (загружается в разделе Управление ресурсами в jsfiddle)

http://jsfiddle.net/6haqv/3/

Возможная ошибка в jquery ui 1.8

0 голосов
/ 18 февраля 2014

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

Я пытаюсь, и вы можете открыть первый календарь в первый раз, во второй раз вы не можете, вам нужно открыть второй календарь, а затем вы можете снова нажать на первый календарь.

...