jQuery UI datepicker — проблема IE при использовании выпадающих списков год / месяц

#jquery #internet-explorer #jquery-ui

#jquery #internet-explorer #jquery-ui

Вопрос:

Недавно я столкнулся с проблемой в IE, используя скрипт jQuery UI datepicker:

  1. Загрузите страницу с указателем даты на ней, отображающим выпадающие списки «год» и «месяц».

  2. Выберите дату (в первый раз это работает нормально).

  3. Откройте datepicker снова, но на этот раз, когда вы нажимаете на один из выпадающих списков год / месяц, он появляется ненадолго, а затем исчезает, и для его корректного отображения требуется второй щелчок.

У меня есть небольшая тестовая страница (см. Ниже), и я протестировал ее с использованием jQuery 1.4.4 и jQuery UI 1.8.10 (моя производственная конфигурация) и jQuery 1.5.2 и jQuery UI 1.8.12 и смог воспроизвести ее в обоих случаях (используя IE9, а также в IE6).

 <head>
<script type="text/javascript">

    $(document).ready(function () {

        $("#testDate").datepicker({changeYear:true, 
                    changeMonth:true, 
                    constrainInput:true, 
                    buttonText:'Choose', 
                    showOn:'both', 
                    showButtonPanel:false, 
                    buttonImageOnly:true});
    });

</script>
</head>
<body>
    <h2>Test</h2>
    <input type="text" id="testDate" />
</body>
  

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

Ответ №1:

Если вы посмотрите на здесь не уменьшенный исходный код (1.8.12), то рассматриваемая функция выглядит следующим образом:

 /* Restore input focus after not changing month/year. */
_clickMonthYear: function(id) {
    var target = $(id);
    var inst = this._getInst(target[0]);
    if (inst.input amp;amp; inst._selectingMonthYear) {
        setTimeout(function() {
            inst.input.focus();
        }, 0);
    }
    inst._selectingMonthYear = !inst._selectingMonthYear;
},
  

Удаление setTimeout() вызова устраняет проблему фокусировки в IE6 для меня. Не уверен, каким может быть побочный эффект. Я выбрал несколько дат с локально измененным jquery-ui, и, кажется, что он все еще нормально работает в Chrome12 и IE6. Может быть, один из них для команды jquery-ui?

Редактировать Обнаружен отчет об ошибке — похоже, он запланирован на 1.8.3

Комментарии:

1. Спасибо за просмотр — пробовал поиграть с этой функцией, но она не заработала. Посмотрим на это снова.

2. Обратите внимание, что может пройти некоторое время, пока они это исправят — 1.8.12 — текущая стабильная версия, и этот билет был открыт почти шесть месяцев.

3. Ах да, он был открыт некоторое время. Однако в отчете об ошибке содержится исправление, чтобы вы могли применить это различие, чтобы заставить его работать в то же время.