2017-01-13 7 views
1

Ich habe eine Seite mit zwei verschiedenen Drucktasten und zwei Arten von div-Tags:JQuery Ändern von CSS-Klasse für print.css Datei nicht Wirksam

<button onclick="window.print()">Print Full</button> 
<button onclick="PrintPartial()">Print Partial</button> 

<div class="not-partial"> 
    Div Content Here should print for "Print Full" but not for "Print Partial" 
</div> 

<div class="no-print"> 
    This content shouldn't print on either 
<div> 

Ich habe folgendes in meiner print.css Datei

.no-print { display: none; } 

und unten ist mein PrintPartial() Funktion

function PrintPartial() { 
    var notPartial = $(".not-partial"); 
    notPartial.addClass("no-print"); 
    window.print(); 
    notPartial.removeClass("no-print"); 
} 

Die "Print Full" Taste funktioniert gut und Drucke accordin g zu meiner print.css-Datei. Das Div, das mit der "no-print" -Klasse fest codiert ist, wird nicht gedruckt.

Die Schaltfläche "Teil drucken" ist jedoch identisch mit der Schaltfläche "Drucken voll".

Wenn ich meinen Debugger starte und in meine PrintPartial() - Funktion eintrete, kann ich die Elemente untersuchen und die "no-print" -Klasse wird zu den richtigen Elementen hinzugefügt. Es ruft window.print() auf, wodurch der Druckdialog geöffnet wird und die Klasse "no-print" aus den Elementen entfernt wird, die in der Variable notPartial gespeichert sind.

Mein einziger Gedanke ist die JQuery Select und addClass läuft asynchron und seine aufrufende drucken, bevor die Klasse geändert hat? Wenn ja, wie stelle ich sicher, dass window.print erst aufgerufen wird, nachdem die addClass abgeschlossen ist.

Ich habe versucht, es ohne die removeClass Schritt und habe die gleichen Ergebnisse, so dass ich weiß, es ist nicht mein Problem, oder zumindest ist es nicht mein einziges Problem.

Kann mir bitte jemand sagen, was ich falsch mache und wie ich es korrigieren kann?

Danke, Scott

UPDATE: Der obige Code funktioniert wie Pabs123 darauf hingewiesen. Ich hatte ein Problem, bei dem ein anderes CSS-Stück (nicht in diesem Beitrag enthalten) die Anzeigeeigenschaft zurückverändert.

Dank

+1

sieht gut aus http://codepen.io/pabs123/pen/YNWEyO einzige Sache, die ich denken kann, ist, dass es andere css gibt, die auf diesem Element handeln, oder es gibt einige andere externe css, die hier nicht gezeigt werden – Pabs123

+0

Ja, Sie sind richtig Ich habe gerade festgestellt, dass ich noch ein Stück CSS auf meiner Seite habe, das den Bildschirm überlagert: keine. Danke für Ihre Hilfe. – Newey

Antwort

0

Sorry, Der Code, den ich hier arbeitet geschrieben, wie beabsichtigt. Wie Pabs123 in seinem/ihrem Kommentar vorgeschlagen hatte, hatte ich andere widersprüchliche CSS, die nicht in der Post enthalten war, die den Anzeigestil zurück von der Anzeige änderte: keine. So wie es geschrieben wurde, war das nicht wirklich eine gute Frage. Es tut uns leid.

Danke für Ihre Hilfe.