Поведение закрытия JQuery DatePicker

У меня есть страница, на которой есть средство выбора даты JQuery, предназначенное для отображения дат в формате мм/гг. Я не писал первоначальный JQuery, и я не очень хорошо с ним знаком, поэтому это может быть простой проблемой, но когда пользователь нажимает кнопку «Готово», средство выбора даты исчезает на секунду, а затем снова открывается, как если бы пользователь щелкнул в текстовом поле снова.

Код, используемый для создания экземпляра средства выбора даты:

$(function() {
    $('.datepicker').datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'mm/yy',
        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        },
        beforeShow: function(input, inst) {
            if ((datestr = $(this).val()).length > 0) {
                year = datestr.substring(datestr.length - 4, datestr.length);
                //month = jQuery.inArray(datestr.substring(0, datestr.length - 5), $(this).datepicker('option', 'monthNames'));
                month = datestr.substring(0, datestr.length - 5);
                $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
                $(this).datepicker('setDate', new Date(year, month-1, 1));
            }
        }
    });
    $("#datepicker").mousedown(function() {
        $('#ui-datepicker-div').toggle();     
    });
});

Погуглив некоторое время, я добавил обработчик mousedown, и это сделало так, что когда вы щелкаете в любом месте страницы вдали от средства выбора даты, оно закрывается, как и ожидалось, но если вы нажимаете кнопку «Готово», оно фактически не закрывает средство выбора даты.


person Mike_OBrien    schedule 01.10.2012    source источник
comment
Когда вы говорите, что когда пользователь нажимает кнопку «Готово», средство выбора даты исчезает на секунду, а затем снова открывается, как если бы пользователь снова щелкнул текстовое поле, это ошибка или предполагаемое поведение?   -  person Adriano Carneiro    schedule 01.10.2012
comment
Это ошибка. Я предположил, что когда пользователь щелкнул «Готово», целью средства выбора даты было бы установить текстовое поле на любую дату, которую они выбрали, и чтобы средство выбора даты ушло, чтобы пользователь мог видеть остальные элементы управления, чтобы ввести любую другую информацию это требуется.   -  person Mike_OBrien    schedule 01.10.2012
comment
Кажется, это проблема только в IE. И хром, и FF работают как положено.   -  person Mike_OBrien    schedule 01.10.2012


Ответы (2)


Он работает так, как ожидалось. Я не вижу ошибки в скрипке, которую я установил http://jsfiddle.net/adrianonantua/ZQTqe/

person Adriano Carneiro    schedule 01.10.2012
comment
может ли проверка формы привести к тому, что она снова получит фокус? или как мне проверить версию JQuery, которую мой предшественник использовал для этого? есть идеи, почему это будет работать так, как ожидалось, в скрипте, но не на реальном сервере? - person Mike_OBrien; 01.10.2012
comment
Логический вывод состоит в том, что сценарий не тот. У вас что-то еще происходит в сценарии сервера. Вы упомянули процесс проверки формы, возможно, это он. Попробуйте отладить его, поместите предложение debugger; в первую строку beforeShow и посмотрите на трассировку стека, чтобы узнать, кто его снова вызывает. - person Adriano Carneiro; 01.10.2012
comment
Спасибо за помощь, но в конце концов я просто полностью удалил средство выбора даты со страницы. Он использовался для получения даты истечения срока действия кредитной карты, поэтому я просто переключил его на использование двух полей со списком вместо средства выбора даты. Я не знаю, что вызвало проблему или где даже начать искать, поэтому я просто отмечаю это как безнадежное дело. - person Mike_OBrien; 01.10.2012

Я бы сказал, что это проблема:

$("#datepicker").mousedown(function() {
    $('#ui-datepicker-div').toggle();     
});

Он также показывает / скрывает форму при наведении мыши, ваш указатель даты будет скрыт автоматически, когда вы нажмете дату или кнопку «Готово». Попробуйте удалить это из своего кода.

person jcubic    schedule 01.10.2012
comment
до того, как я включил эти строки, они никогда не исчезнут, если вы не щелкнете в текстовом поле и не используете клавишу табуляции для перехода к следующему элементу управления. Щелчок в любом месте страницы приводил к тому, что средство выбора даты мигало, а затем снова включалось. Я исправил свою первоначальную проблему, и я думаю, что это было просто из-за того, что я не был знаком с кодом, и человек, который его написал, сделал что-то неправильно. Я удалил рассматриваемое средство выбора даты и нашел другой способ выполнить то, что мне нужно. - person Mike_OBrien; 01.10.2012
comment
Я думал, что обработчик привязан к средству выбора даты, а не к полю ввода. - person jcubic; 01.10.2012
comment
Средство выбора даты расширяет поле ввода. Поэтому я думаю о них как об одном и том же (датчик не может существовать без поля ввода, поле ввода - это просто текстовое поле без средства выбора даты). Что касается обработчика, я не знаю, к какому элементу управления он принадлежит. Это не имеет значения, я уверен, что это была просто смесь совпадений, которая вызвала мою первоначальную проблему, и у меня больше нет желания отслеживать ее, поскольку разделение даты на два разных поля было наиболее интуитивным способом получить пользователь вводит информацию для начала. - person Mike_OBrien; 02.10.2012