InnerHTML / outerHTML in IE gibt den Status der Checkbox nicht wieder, außer im Quirks-Modus

8

Ich kämpfe gerade gegen einen IE JavaScript / DOM-Bug (was für ein Spaß) und es hat mich wirklich überrascht. Der fragliche Code kopiert einige Kontrollkästchen in ein Formular und muss den Status der Überprüfung beibehalten. Problem ist, IE (speziell IE8, obwohl ich auch andere rate) will das nicht tun.

Ich habe den Fehler selbst auf einen sehr kleinen Testfall beschränkt. Grundsätzlich funktionieren die Dinge ohne einen DOCTYPE auf der Seite, aber sie sind defekt, wenn ein DOCTYPE vorhanden ist. Ich hätte das Gegenteil erwartet, aber wer weiß mit IE.

Nachfolgend finden Sie die einfachsten möglichen Testfälle. Für jede von ihnen: öffne die Seite in IE, schalte das Kontrollkästchen ein und klicke dann auf "TEST".

Erzeugt keinen Fehler:

%Vor%

Link

Erzeugt den Fehler:

%Vor%

Link

Der Fehler tritt auf gültigen Seiten auf (mit <html> , <head> , <body> usw.) und ob die Eingabe innerhalb eines Formulars ist oder nicht. Im "gebrochenen" Fall gibt outerHTML immer wieder an, was beim Laden der Seite vorhanden war (wenn ich die Eingabe standardmäßig aktiviert habe, alarmiert sie immer den Code mit CHECKED, selbst wenn ich sie vorher deaktiviere). Die Dinge passieren auf die gleiche Weise, wenn ich die Eingabe umschließe und innerHTML verwende. Auf der tatsächlichen Website verwende ich jQuery.clone () -Methode, um das Kopieren zu tun; .clone () benutzt intern .outerHTML und so habe ich das eingegrenzt.

Meine Frage ist folgende: Gibt es einen Weg, um manuell neuen HTML-Code manuell zu erstellen? Und hat irgendjemand eine Idee, warum das überhaupt passiert (anders als "IE SUX LOLZ")?

    
Matt Kantor 22.06.2010, 21:18
quelle

3 Antworten

5

Es gibt Probleme im Allgemeinen mit innerHTML und Formulareigenschaften. Nicht nur in IE ((es ist schlimmer in FF, wird es nie aktualisieren die checked-Eigenschaft in innerHTML)) ...

Sie können dies versuchen, um das Problem in der verknüpften Frage zu umgehen:

%Vor%     
gnarf 22.06.2010, 21:41
quelle
1

Ich schrieb einen Wrapper für .clone () basierend auf gnarfs Antwort :

%Vor%

Es ist nicht sehr allgemein (z. B. wird es nicht funktionieren, wenn Sie versuchen, Elemente mit Eingaben zu klonen), aber für diesen Fall scheint es den Trick zu tun.

    
Matt Kantor 22.06.2010 23:47
quelle
0

Verwenden Sie das DOM-äquivalente Objekt eines Kontrollkästchens Ссылка

Fügen Sie es Ihrem DOM-Formular hinzu, verwenden Sie nicht HTML und diesen schmutzigen Weg.

Aus Gründen der Klarheit:

%Vor%

Dadurch fügen Sie Ihrem Formular das Kontrollkästchen hinzu und behalten den aktivierten Status (und andere) bei.

    
blow 22.06.2010 21:34
quelle