jQuery исчезает не работает на IE9 - PullRequest
2 голосов
/ 05 августа 2011

Странная проблема это. У меня есть веб-страница, которая затеняет изображения по таймеру, используя методы jQuery fadeIn () и fadeOut (). Он отлично работал в Firefox и Chrome, но не в IE9 - только первое изображение, которое когда-либо показывалось. После большого удаления CSS, HTML и т. Д., Чтобы устранить причину, мне удалось заставить его работать в IE9 , но только если я удалил первую строку моего HTML-файла :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

При наличии этой строки fadeIn () завершается ошибкой. Без этой строки fadeIn () работает. fadeOut () работает независимо.

Я использую последнюю стабильную сборку jQuery (скачано вчера).

Это файл HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="scripts/jquery.js" type="text/javascript"></script>
        <script src="scripts/imageswitch.js" type="text/javascript"></script>
    </head>
    <body>
        <div id="myGallery">
            <img src="/images/Img1.jpg" id="firstimg" class="active ready" onload="setInterval( 'swapImages()', 3000 );" />
            <img src="/images/Img2.jpg" onload="SetImgReady(this);" />
            <img src="/images/Img3.jpg" onload="SetImgReady(this);" />
        </div>
    </body>
</html>

Это содержимое файла "imageswitch.js": (я использую функцию SetImgReady (), чтобы добавить класс 'ready' к каждому изображению после завершения загрузки, чтобы оно вращалось только между полностью загруженными изображениями)

function swapImages() {
    var $active = $('#myGallery .active');
    var $next = ($('#myGallery .active').next().length > 0) ? $('#myGallery .active').next() : $('#myGallery img:first');

    while ($next && !$next.hasClass('ready')) {
        if ($next.next().length > 0)
            $next = $next.next();
        else
            $next = false;
    }

    if ($next && $active) {
        $next.fadeIn( 2000 ).addClass('active');
        $active.fadeOut( 2000 ).removeClass('active');
    }
}

function SetImgReady( $ImgObj ) {
    if ($ImgObj)
        $ImgObj.className += "ready";
}

А это CSS:

#myGallery{
    position:relative;
    width:400px;
    height:300px;
}
#myGallery img{
    display:none;
    position:absolute;
    top:0;
    left:0;
    border: 1px solid black;
}
#myGallery img.active{
    display:block;
}

Итак ... декларация заставляет IE9 быть чрезмерно совместимым со стандартами и решает, что замирание не разрешено в XHTML1.0 или чем-то еще?

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

Спасибо всем.

Ответы [ 4 ]

2 голосов
/ 12 января 2013

Дэвид: пропущенный заголовок в заголовке НЕ является ошибкой. На самом деле HTML5 давайте пропустим весь заголовок, и это действительно. В соответствии с официальной спецификацией W3C HTML, вам нужен только раздел body :), так что я думаю, что это самый короткий HTML-код:

<html><body><h1>hello world</h1></body></html>

просто не уверен насчет необходимости! Doctype:)

проблема с темой - каким-то образом раскрываться в CSS и отображать свойство в IE, в большинстве случаев из IE6. Если вы установите «display: none» для элемента HTML, вы не получите результатов с FadeIn, так как элемент не отображается из-за «display: none», и fadeIn не изменяет это состояние.

Мое решение: сделать CSS-класс «скрытым» и установить как «display: none», как обычно. И эта строка кода JavaScript запускается для document.load:

$('.hidden').fadeTo(0,0).css('visibility','visible');

после этого fadeIn - и в конечном итоге fadeOut :) - теперь должно работать. Если у вас все еще есть проблемы - попробуйте использовать анимационный эффект fadeTo или непрозрачность вместо fadeIn / fadeOut.

1 голос
/ 14 сентября 2011

Удаление DOCTYPE переводит IE в режим совместимости, вы можете добиться того же, нажав F12, чтобы активировать консоль отладки, а затем выбрав режим совместимости или режим совместимости в нижней части экрана.

Но у меня такое же странное поведение.

Кажется, что он работает лучше, если по какой-то причине выполнить код в режиме отладки, или если вы прикрепите поведение к кнопке, оно в конечном итоге сработает, если вы щелкнете по нему достаточно.

Я думаю, что поведение fadein глючит, и исчезает только на фоне элемента, а не на переднем плане. show () демонстрирует то же странное поведение.

Все отлично работает в режиме совместимости, насколько мне не нравится его использование.

0 голосов
/ 13 октября 2011

У меня была такая же проблема с 1.6.2.Обновление до 1.6.4 решило это.

0 голосов
/ 05 августа 2011

Если вы используете более старую версию jquery, пожалуйста, обновитесь до версии 1.6+. В IE9 было несколько проблем со старыми версиями. Я надеюсь, что это решит проблему.

...