2 Stimmen

IE9-Bug mit optionaler </p>-Schließung

Ich habe diesen Code in IE9 ausprobiert, unerwartet ist er kaputt gegangen, weil ein fehlendes

nach der Überschrift war.

Live-Demo

#MyForm div {
    width: 200px;
    height: 30px;
    float: left;
}

    Login

            Meine E-Mail

            Mein Passwort

Handelt es sich um einen Bug oder bin nur ich betroffen?

Update

Ein Blockelement ist innerhalb eines "p"-Tags gemäß W3C ungültig

    ...

Aber es ist optional, das

-Tag zu schließen, also,

Inhalt Block 1
Inhalt Block 2
Inhalt Block 3
 ..... 

Dies scheint gültig zu sein. Ein Blockelement sollte automatisch das

-Tag schließen, wenn es nicht explizit geschlossen wird, wie im ersten Beispiel.

6voto

Quentin Punkte 850700

Dies scheint tatsächlich ein Fehler in IE9 zu sein.

Nach weiteren Tests (und dem Hinzufügen einiger s in das Formular) sieht es so aus, als ob IE9 im Standardsmodus nicht erkennt, dass ein

nicht als Nachfolger eines

erlaubt ist, aber erkennt, dass auch ein

nicht erlaubt ist.

Dementsprechend fügt er Elemente als Nachfolger des

Knotens ein, bis er auf das erste

trifft, woraufhin er das und das

beendet und den Rest des Formulars nach dem Formular einfügt.

Wenn er erreicht, behandelt er es als Endtag für ein nicht offenes Element und ignoriert es.

4voto

hradac Punkte 2361

Nachdem ich eine Minute lang mit dem Beispielfiddle gearbeitet habe, kann ich bestätigen, dass IE9 damit ein Problem hat. Möglicherweise haben auch andere Browser dasselbe Problem, obwohl ich dies nicht bestätigt habe. Das Problem ist, dass IE9 glaubt, dass Sie ein Blockelement (die div) innerhalb des p-Tags verschachteln. Das ist nicht korrekt. Das verursacht Layoutfehler. Ich habe sogar das p nicht geschlossen gelassen und das div in ein span geändert und es hat einwandfrei funktioniert. Alternativ könnten Sie auch den p-Tag schließen.

2voto

Toomai Punkte 3856

Ältere Versionen von Browsern haben sich nicht so sehr darum gekümmert, wenn gewisse Dinge wie

fehlten; sie versuchten, es zu beheben. Diese schlechte Praxis wird langsam ausgemerzt, daher funktioniert es nicht mehr in neueren Browsern/HTML-Versionen.

1voto

Mr.Mindor Punkte 4009

Während ich den Sarkasmus in Johns Antwort schätze, um klarzustellen, dies ist tatsächlich kein Fehler im Browser.

Was passiert, ist, dass der Browser versucht, den Standards zu entsprechen. Die Standards definieren das erwartete Verhalten bei gültigem HTML. Bei fehlerhaftem HTML schweigt der Standard, und daher nimmt IE9 an, dass das fehlende Tag an anderer Stelle hingehört, und IE9 zeigt es falsch an.

Sie können IE9 zwingen, versuchen, fehlerhaftes HTML zu korrigieren, indem Sie F12 drücken und die Kompatibilitätseinstellungen ändern.

Da Sie nicht erwarten können, dass Ihr Endbenutzer dies akzeptiert, ist eine bessere Lösung, das von Ihnen generierte HTML zu validieren.

0voto

l008com Punkte 1640

Ich stoße regelmäßig auf diesen Fehler. Wenn Sie Ihre P's schließen oder sie einfach löschen können, wird das FORMULAR normal funktionieren. Es kann schwierig sein, dieses Problem zu verfolgen, da es sich auf so viele verschiedene Arten manifestieren kann. Zuletzt gab es für mich keine visuelle Darstellungshinweise, aber ich erhielt nur unsinnige Javascript-Fehler nur in IE9.

Normalerweise reicht es aus, das P-Tag direkt vor meinem Formular zu löschen, um das Problem zu beheben.

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