2 Stimmen

JQuery fadeIn funktioniert nicht in IE9

Ein seltsames Problem. Ich habe eine Webseite, auf der Bilder mit einem Timer ein- und ausgeblendet werden, unter Verwendung der fadeIn() und fadeOut() Methoden von jQuery. Es hat problemlos in Firefox und Chrome funktioniert, aber nicht in IE9 - nur das erste Bild wurde angezeigt. Nachdem ich viel CSS, HTML usw. entfernt hatte, um den Grund zu finden, konnte ich es schließlich in IE9 zum Laufen bringen aber nur, wenn ich die erste Zeile meiner HTML-Datei entferne:

Mit dieser Zeile vorhanden, schlägt fadeIn() fehl. Ohne diese Zeile funktioniert fadeIn(). fadeOut() scheint unabhängig davon zu funktionieren.

Ich benutze die neueste stabile Version von jQuery (gestern heruntergeladen).

Dies ist die HTML-Datei:

Dies sind die Inhalte von "imageswitch.js": (Ich verwende die Funktion SetImgReady(), um der 'ready' Klasse jedes Bild hinzuzufügen, sobald es fertig heruntergeladen wurde, sodass es nur zwischen vollständig geladenen Bildern wechselt)

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";
}

Und dies ist das 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;
}

Also... bewirkt die Deklaration, dass IE9 übermäßig standardskonform wird und entscheidet, dass Einblendeffekte unter XHTML1.0 nicht erlaubt sind oder so etwas?

Ein weiteres seltsames Ereignis, das ebenfalls auftritt, sobald das Einblenden funktioniert: Nur beim ersten Bildwechsel verschwindet das angezeigte Bild sofort anstatt langsam auszublenden. Alle anderen Bilder blenden schön ein/aus, wie benötigt. Irgendwelche Gedanken dazu?

Vielen Dank an alle.

2voto

user1906727 Punkte 41

David: Fehlender Titel im Head ist KEIN Fehler. Tatsächlich erlaubt HTML5 das Überspringen des gesamten Head-Bereichs und es ist gültig. Laut offizieller W3C HTML-Spezifikation muss man nur einen Body-Bereich haben :) Also denke ich, dass dies das kürzeste erlaubte HTML ist:

Hallo Welt

Bin mir nur nicht sicher, ob ein !DOCTYPE benötigt wird :)

Das Problem betrifft - irgendwie - CSS und die Anzeige-Eigenschaft in IE, meistens in IE6. Wenn Sie "display:none" auf ein HTML-Element setzen, erhalten Sie keine Ergebnisse mit FadeIn, da das Element aufgrund von "display:none" nicht angezeigt wird und fadeIn diesen Zustand nicht ändert.

Meine Lösung ist: erstellen Sie eine CSS-Klasse "versteckt" und setzen Sie sie wie gewohnt auf "display:none". Und diese Zeile JavaScript-Code wird bei document.load ausgeführt:

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

Nach dem fadeIn - und schließlich fadeOut :) - sollte jetzt funktionieren. Wenn Sie immer noch Probleme haben - versuchen Sie fadeTo oder die Opazitätsanimationswirkung anstelle von fadeIn/fadeOut zu verwenden.

1voto

David Elyk Punkte 49

Wenn Sie das DOCTYPE entfernen, versetzt dies den Internet Explorer in den Quirks-Modus. Sie können dasselbe erreichen, indem Sie F12 drücken, um die Debug-Konsole zu aktivieren, und dann den Quirks-Modus oder den Kompatibilitätsmodus am unteren Bildschirmrand auswählen.

Ich bekomme jedoch das gleiche seltsame Verhalten.

Es scheint besser zu funktionieren, wenn der Code im Debug-Modus ausgeführt wird, aus irgendeinem Grund, oder wenn Sie das Verhalten an eine Schaltfläche anhängen, wird es irgendwann funktionieren, wenn Sie oft genug darauf klicken.

Ich denke, das Fadein-Verhalten ist fehlerhaft und blendet nur den Hintergrund des Elements ein und nicht den Vordergrund. show() zeigt dasselbe seltsame Verhalten.

Alles funktioniert gut im Kompatibilitätsmodus, obwohl ich es ungern benutze.

0voto

ShankarSangoli Punkte 68964

Wenn Sie eine ältere Version von jQuery verwenden, aktualisieren Sie bitte auf Versionen 1.6 oder höher. Es gab einige Probleme mit älteren Versionen in IE9. Ich hoffe, das wird das Problem beheben.

0voto

Andreas Punkte 20

Ich hatte das gleiche Problem mit 1.6.2. Ein Update auf 1.6.4 hat es gelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X