2012-08-02 21 views
6

tengo que imprimir un div la que estoy haciendo de la siguiente manera:window.print no funciona en 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; 
    } 

Mi problema es que en IE, al hacer clic en el botón no pasa nada . Sin embargo, en Chrome y Firefox funciona. ¿Qué puedo hacer para imprimirlo correctamente?

EDIT: Estoy llaman print de la siguiente manera:

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

Aquí es donde print_it es el id del botón.

Otra cosa que he visto es que después de un tiempo, Chrome junto con otros navegadores me dice que la página no responde. ¿Por qué está pasando esto?

+0

posible de este DUP: http://stackoverflow.com/questions/2555697/window-print-not-working-in-ie – mpm

+0

no podría usar 'mywindow.document.innerHTML'? – starbeamrainbowlabs

+0

¿Dónde está su controlador de eventos click? –

Respuesta

8

Debe hacer un mywindow.document.close() y es posible que no tiene un espacio en el nombre de la ventana

Asumo se invoca PrintElem del onclick de algo - si es que algo es un enlace, es necesario devolver false en el controlador onclick!

Así es como yo lo haría si tuviera que

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; 
} 

pero no estoy seguro de si o no el window.close() va a interferir con la impresión

Y por qué no

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

me da error en el elemento var = $ ('# itinerario'); – JackTurky

+1

resuelto ... el problema es que utilicé var mywindow = window.open ('', 'a name', 'height = 600, width = 800'); en su lugar var mywindow = window.open ('', '_blank', 'height = 600, width = 800'); Microsoft permite solo algunos argumentos como el nombre – JackTurky

+2

Ya te dije eso. Sin espacio permitido Mi código usa subrayado – mplungjan

1

veo que haya resuelto usando la nota de mplungjan sobre ningún espacio en el nombre de la ventana, pero una alternativa sería utilizar @media estilos de impresión 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

Usaría la visualización sobre la visibilidad ya que la visibilidad aún ocupa espacio en la página – mplungjan

0

En mi caso, este problema se resolvió haciendo un enfoque antes de la impresión.

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

1

En mi caso solo necesitaba usar el código de abajo:

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