views:

1222

answers:

4

I am trying to hide some divs before the user prints this giant form, then display the divs again afterward. Thus I want to ignore the rest of the page, and only print the form itself.

Sure I could open a separate page when the user clicks the print button. The only thing is that the form is really long and it would be quite tedious to do that.


Edit: My previous question did not actually reflect what I was looking for. So I changed it to the current one.

Also thanks to all that suggested window.onbeforeprint and window.onafterprint. That was relevant to my edited question.

+10  A: 

First, The Ok Way:

Take a look at window.onbeforeprint and window.onafterprint (the original question asked about how to do it programmatically I believe).

Now, the Better Way:

A better way to do this is with a style that is specifically for printing. In other words, your div might look like this:

<div class="someClass noPrint">My Info</div>

You would then have this in your stylesheet:

.someClass {font-family:arial;}
@media print {
    .noPrint { display: none; }
}

Another Option

You could also put this in a separate stylesheet if you wanted so you don't have to mix styles:

<link rel="stylesheet" type="text/css" media="print" href="print.css">

Your screen stylesheet could have ".someClass" defined one way and then your print stylesheet could have it defined a completely different way.

Micky McQuade
This is the way we do it at my company. It works very well and we don't have to muck with JavaScript.
Zack Mulgrew
Yeah, we set noPrint on all our header and footer sections as well as any menus that shouldn't print.
Micky McQuade
I prefer to create a separate stylesheet that handles all print-related style changes rather than add them to existing stylesheets.
tvanfosson
Edited question to talk about separate stylesheet
Micky McQuade
A: 

You may want to consider creating a style sheet specifically for printing using media="print"

David Schlosnagle
+14  A: 

IE supports onbeforeprint and onafterprint, but what you really want is a print stylesheet.

<link rel="stylesheet" type="text/css" media="print" href="print.css">

See also: this answer

eyelidlessness
A: 

You should really implement this as CSS media=print styles. The media attribute of link element can be used to select to which media a stylesheet is applied. Check this article

spender