Ich kämpfe gerade mit einem JavaScript/DOM-Bug im IE (was für ein Spaß), und er hat mich wirklich verblüfft. Der Code in Frage kopiert einige Kontrollkästchen in ein Formular und muss ihren markierten Zustand zu halten. Das Problem ist, IE (speziell IE8, obwohl ich vermute, andere als auch) will nicht, dass zu tun.
Ich habe den Fehler selbst auf einen sehr kleinen Testfall eingegrenzt. Im Grunde funktionieren die Dinge ohne DOCTYPE auf der Seite korrekt, aber sie sind kaputt, wenn ein DOCTYPE vorhanden ist. Ich hätte das Gegenteil erwartet, aber wer weiß das schon beim IE.
Im Folgenden sind die einfachsten möglichen Testfälle aufgeführt. Für jeden dieser Fälle gilt: Öffnen Sie die Seite im IE, aktivieren Sie das Kontrollkästchen und klicken Sie auf "TEST".
Erzeugt den Fehler nicht:
<input type="checkbox" id="broken">
<button id="break">TEST</button>
<script>
document.getElementById('break').onclick = function() {
alert(document.getElementById('broken').outerHTML);
};
</script>
Erzeugt den Fehler:
<!DOCTYPE html>
<input type="checkbox" id="broken">
<button id="break">TEST</button>
<script>
document.getElementById('break').onclick = function() {
alert(document.getElementById('broken').outerHTML);
};
</script>
Der Fehler tritt auf gültigen Seiten auf (mit <html>
, <head>
, <body>
usw.) und ob die Eingabe innerhalb eines Formulars erfolgt oder nicht. Im "kaputten" Fall spiegelt outerHTML immer das wider, was beim Laden der Seite vorhanden war (wenn ich die Eingabe standardmäßig angekreuzt habe, wird immer Code mit CHECKED gemeldet, auch wenn ich die Markierung zuerst aufhebe). Das Gleiche passiert, wenn ich die Eingabe umschließe und innerHTML verwende. Auf der aktuellen Website verwende ich die jQuery-Methode .clone(), um das Kopieren durchzuführen; .clone() verwendet intern .outerHTML, und so habe ich das Problem eingegrenzt.
Meine Frage lautet: Gibt es eine Möglichkeit, dieses Problem zu umgehen, ohne dass ich selbst manuell neues HTML erstellen muss? Und hat jemand eine Idee, WARUM das überhaupt passiert (außer "IE SUX LOLZ")?
0 Stimmen
Beide Versionen, ob das Kontrollkästchen aktiviert ist oder nicht, geben Folgendes aus
undefined
in Firefox 3.6.3. In Chromium 5.0.375.70 und Opera 10.10 alarmieren beide Versionen<input type="checkbox" id="broken">
(alle Browser laufen unter Linux).0 Stimmen
Möglicherweise verwandt? -- stackoverflow.com/questions/1388893
0 Stimmen
@blow, @Marcel: Firefox unterstützt .outerHTML nicht. Ich verwende die .clone()-Methode von jQuery, die in Firefox .cloneNode() verwendet, also ist das kein Problem. Dies ist speziell eine IE-Frage.