2012-08-02 4 views
6

devo stampare un div che sto facendo nel modo seguente:window.print non funziona in IE

function PrintElem(elem) 
    { 
     Popup(elem.html()); 
    } 

    function Popup(data) 
    { 
     var mywindow = window.open('', 'to print', 'height=600,width=800'); 
     mywindow.document.write('<html><head><title></title>'); 
     mywindow.document.write('<link rel="stylesheet" href="css/mycss.css" type="text/css" />'); 
     mywindow.document.write('</head><body >'); 
     mywindow.document.write(data); 
     mywindow.document.write('</body></html>'); 

     mywindow.print(); 
     mywindow.close(); 

     return true; 
    } 

mio problema è che su IE, quando si fa clic sul pulsante non accade nulla . Tuttavia, su Chrome e Firefox funziona. Cosa posso fare per stamparlo correttamente?

EDIT: Sono chiamano print nel seguente modo:

$('#print_it').click(function(){ 
    var element = $('#itinerario'); 
    PrintElem(element); 
}); 

Questo è dove print_it è l'id del pulsante.

Un'altra cosa che ho visto è che dopo un periodo di tempo, Chrome insieme ad altri browser mi dice che la pagina non risponde. Perché sta succedendo?

+0

possibile DUP di questo: http://stackoverflow.com/questions/2555697/window-print-not-working-in-ie – mpm

+0

non potresti usare 'mywindow.document.innerHTML'? – starbeamrainbowlabs

+0

Dov'è il gestore di eventi per i clic? –

risposta

8

si deve fare un mywindow.document.close() e si può non si dispone di uno spazio nel nome della finestra

presumo si richiama PrintElem da onclick di qualcosa - se quel qualcosa è un collegamento, è necessario restituire false in gestore onclick!

Ecco come lo farei se dovessi

function PrintElem(elem) { 
    Popup($(elem).html()); 
} 

function Popup(data) 
{ 
    var mywindow = window.open('', 'to_print', 'height=600,width=800'); 
    var html = '<html><head><title></title>'+ 
       '<link rel="stylesheet" href="css/mycss.css" type="text/css" />'+ 
       '</head><body onload="window.focus(); window.print(); window.close()">'+ 
       data+ 
       '</body></html>'; 
    mywindow.document.write(html); 
    mywindow.document.close(); 
    return true; 
} 

ma non sono sicuro se il window.close() interferisce con la stampa

E perché non

$(function() { 
    $('#print_it').click(function(){ 
    popup($('#itinerario').html()); 
    }); 
}); 
+0

mi dà errore su var element = $ ('# itinerario'); – JackTurky

+1

risolto ... il problema è che ho usato var mywindow = window.open ('', 'un nome', 'height = 600, width = 800'); invece var mywindow = window.open ('', '_blank', 'height = 600, width = 800'); microsoft permette solo alcuni argomenti come il nome – JackTurky

+2

te l'ho già detto. Nessuno spazio permesso. Il mio codice utilizza il carattere di sottolineatura – mplungjan

1

vedo che hai risolto utilizzando il biglietto di mplungjan su spazi nel nome della finestra, ma un'alternativa potrebbe essere quella di utilizzare @media stili di stampa CSS, crudamente:

<!DOCTYPE html> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
    <style type="text/css"> 
     @media print { 
      * { 
       visibility: hidden; 
      } 

      .printMe { 
       visibility: visible; 
      } 
     } 
    </style> 
    <script type="text/javascript" src="jquery-1.4.4.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#Button1").click(function() { 
       var divToPrint = $("#div3"); 
       $(divToPrint).addClass("printMe"); 
       window.print(); 
       $(divToPrint).removeClass("printMe"); 
      } 
      ) 
     } 
     ); 
    </script> 
</head> 
<body> 
    <div id="div1">fhgjghajghhjagjdag</div> 
    <div id="div2">ytiyrtiyertuyeyiyt</div> 
    <div id="div3">We want to print this one.</div> 
    <div id="div4">vnbcxbvmzxbvc,xbv</div> 
    <div id="buttonContainer"> 
     <input id="Button1" type="button" value="button" /> 
    </div> 
</body> 
</html> 
+0

Vorrei usare la visualizzazione oltre la visibilità poiché la visibilità occupa ancora spazio sulla pagina – mplungjan

0

Nel mio caso questo problema è stato risolto mettendo a fuoco prima della stampa.

window.focus(); window.print();

1

Sul mio caso ho solo bisogno di utilizzare il codice qui sotto:

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