2010-08-28 8 views
7

Seltsames Problem. Ich habe ein einfaches Webformular, in dem Benutzer Text eingeben und einige Kontrollkästchen aktivieren/deaktivieren können. Wenn dies in IE (7 oder 8) auf PDF oder Papier (oder Druckvorschau) gedruckt wird, werden die Kontrollkästchen unverändert gedruckt. Z.B. Benutzer legt einen Haken fest, dieser wird unmarkiert ausgedruckt ... oder mit einem vorbecheckten Kästchen bei dem der Benutzer nicht markiert ist, wird das Häkchen gedruckt.Seite drucken zeigt unveränderte Checkbox in IE mit DocType

Das gleiche gilt für das Radio.

Nur wenn ich den DocType vollständig entferne, druckt IE es korrekt. Aber ich muss XHTML-strict verwenden.

Dies ist ein einfaches Beispiel, das in IE versagt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="nl" xml:lang="nl-NL"> 
<body> 
<input type='checkbox' name='y'/><br/> 
<input type='radio' name='x'/><br/> 
</body> 
</html> 

nicht mit Doctype I (lose oder HTML4) getestet funktioniert.

Wer eine Idee, wie das zu lösen?

Vielen Dank, Michael

+1

Durch das Entfernen des DOCTYPE wird der Browser in den Quirks-Modus versetzt. Ich bezweifle ernsthaft, dass Sie kontrollieren können, wie der Browser die Formularfelder für das Drucken ausgibt, aber vielleicht kennt jemand einen Trick. – Pointy

+0

Ja, ich weiß. Aber es sollte viele IE-Benutzer geben, die wollen, dass ihre Checkboxen korrekt gedruckt werden, würde ich raten. – Michael

Antwort

5

Schaltet ein IE8 Bug sein out: http://webbugtrack.blogspot.com/2009/04/bug-444-ie8-printing-issues-in.html

Es ist nicht mit diesem Problem mit "Kompatibilitätsansicht" eingeschaltet.

Eine Lösung ist die folgende in der Kopfzeile hinzuzufügen:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

Welche irgendwie bricht Validierung und gibt ein Problem, wenn IE9 kommt.

Andere „nice“ Abhilfe mit JavaScript funktioniert auch:

<input type='checkbox' name='y' onclick='SetCheck(this)'/> 
..... 

function SetCheck(el) 
{ 
    if(el) 
    { 
    if(el.checked) el.setAttribute('checked','checked'); 
    else   el.removeAttribute("checked"); 
    } 
} 

Aber wenn man nicht auf Javascript verlassen können eingeschaltet wird, werden Sie von Microsoft geschraubt.

+3

Kein Tag vergeht, an dem wir nicht von Microsoft geschraubt werden. – Roel