JQuery DatePicker возникли проблемы в IE8? - PullRequest
9 голосов
/ 28 марта 2011

я видел пару похожих тем, но позже они оказались разными проблемами ... моя, похоже, специфическая проблема браузера, потому что мой указатель даты отлично работает в Firefox, но, конечно, не в IE8. Вот моя оригинальная проблема и исходный код

Я обновил свой DatePicker до JQuery UI Datepicker 1.8.11 ... все же он просто не работает в IE 8! Средство выбора даты выскакивает просто отлично, но событие не запускается. Я имею в виду отсутствие щелчка ... ничего не происходит ...

Есть идеи?

Ответы [ 6 ]

3 голосов
/ 05 января 2012

Эй, я не знаю, решили ли вы эту проблему, но проблема в добавленных атрибутах. Особенно, если вы используете:

yearRange: '-100:+10'

например ...

Вот как вы решаете проблему: скопировано с http://satish.name/?p=19

jQuery datepicker добавляет новый атрибут к элементу DOM в IE. Если вы попытаетесь добавить новый элемент DOM, динамически копирующий из существующего элемента, средство выбора даты не будет работать в IE, так как вновь добавленный элемент DOM ссылается на старый атрибут jQuery. Один из способов исправить это - удалить атрибут, а затем создать экземпляр класса datepicker для элемента. См. Следующий код для исправления.

//newDiv is the new added dom element with innerHTML
jQuery("#newDiv").find(".datePicker").each(function() {
    //removing jquery added attribute as this is causing the dynamically
    // added DOM elem referring old DOM element from it is copied.
    if (jQuery.browser.msie) {
        var jqaddedattr;
        jQuery(this.attributes).each(function() {
            if (this.name.search(/jQuery/) != -1) {
                jqaddedattr = this;
            }
        });
        if (jqaddedattr) {
            jQuery(this).removeAttr(jqaddedattr.name);
        }
    }
    jQuery(this).datepicker({yearRange: '-100:+10', changeFirstDay:false}).val("").trigger('change');
})

ура

2 голосов
/ 31 января 2012

Это дополнительная информация, а не ответ, но, к сожалению, добавление в качестве комментария было слишком длинным.

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

Я сузил эту проблему до конкретной сборки IE8 (v8.0.7600.16385), работающей в Windows 2008 R2 x64.У нас есть другие виртуальные машины в той же ОС, но с разными сборками IE8, и эта проблема не возникает.Мы не видели проблемы с IE8, работающей в Windows XP, Vista, 2003 или 7. Она также отлично работает в Firefox и Chrome.

Я пробовал исправление, на которое ссылается mahatmanich, но это не решило проблему (хотя мы не используем параметр yearRange).

Я также полностью обновил Windows (за исключением IE9), но это не обновило номер версии IE8 и не устранило проблему.

Наконец я обновил jQueryдо 1.7.1 и jQuery UI до 1.8.17, но ни обновление не решило проблему.

У кого-нибудь есть другие идеи или информация?

2 голосов
/ 28 марта 2011

Этот jsFiddle содержит базовый код для получения средства выбора даты jQuery UI, работающего с элементом <input type="text" />.

http://jsfiddle.net/rbwh7/2/

Я подтвердил, что это работает в IE8, Chrome, Firefox.

Можете ли вы проверить это, чтобы увидеть, работает ли это для вас?

1 голос
/ 22 сентября 2014

У меня была похожая проблема.В моем случае мне пришлось щелкнуть во всплывающем окне datetimepicker один раз, чтобы получить фокус, и второй раз, чтобы вызвать фактическое событие в IE8.проблема:

validateOnBlur: false
1 голос
/ 29 мая 2014

Я сейчас использую плагин jQuery DateTimePicker v2.2.5. Когда он работает в IE8, средство выбора даты не имело ответа, когда я щелкал по элементам td дня. Казалось, что событие click не было запущено. Затем я подошел к консоли и обнаружил ошибку во время выполнения скрипта datepicker. Переменная была нулевой, когда другие вызывали ее функцию. После отладки я обнаружил, что в следующих кодах для переменной задано значение null (я просто установил validateOnBlur в false в параметрах, чтобы решить проблему ..)

if( options.validateOnBlur ) {
    input.off('blur.xdsoft')
    .on('blur.xdsoft', function() {
        if( options.allowBlank && !$.trim($(this).val()).length ) {
            $(this).val(null);
            //***************************************************
            // After running of the following line, the variable 
            //_xdsoft_datetime.currentTime was setting to null.
            // It seemed that the order of events fired not as 
            //expected.Valedate runned before the selected day value sets to input..
            // So I just set validateOnBlur to false in options to resolve the issue..
            datetimepicker.data('xdsoft_datetime').empty();
        }else if( !Date.parseDate( $(this).val(), options.format ) ) {
            $(this).val((_xdsoft_datetime.now()).dateFormat( options.format ));
            datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
        }
        else{
            datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
        }
        datetimepicker.trigger('changedatetime.xdsoft');
   });
}
0 голосов
/ 04 мая 2016

У меня была такая же проблема. Я не мог изменить месяц или год, когда был открыт указатель даты и времени в диалоговом окне jquery.

Я могу исправить эту проблему, добавив прослушиватель onShow, который фокусируется на другом входе. Это мой исходный код:

$(".date").datetimepicker({
    dayOfWeekStart : 1,
    timepicker : false,
    scrollMonth : false,
    scrollInput : false,
    format : 'd/m/Y',
    formatDate : 'd/m/Y',
    lang : 'es',
    onShow : function() {
        $('#anotherInput').focus();
    },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...