2016-08-24 95 views
0

我有两个功能,打印element和打印page打印使用jQuery

function printPage(page,redirect,dontPrint=false) 
{ 
    if($('.printThis').length == 0) 
    { 
     $('body').append('<div class="printThis hide"></div>'); 
    } 
    $('.printThis').load(page,function(){ 
     printContent($('.printThis'),redirect,dontPrint); 
     $('.printThis').remove(); 
    }); 
} 

function printContent(div_id,redirect,dontPrint=false) 
{ 
    var DocumentContainer = div_id.html(); 
    var html = '<html><head>'+ 
        '<link href="'+tmpl+'assets/css/print.css" rel="stylesheet" type="text/css" />'+ 
        '</head><body style="background:#ffffff;">'+ 
        DocumentContainer+ 
        '</body></html>'; 
    var WindowObject = window.open("", "PrintWindow", 
    "width=750,height=650,top=50,left=50,toolbars=no,scrollbars=yes,status=no,resizable=yes"); 
    WindowObject.document.write(html); 
    WindowObject.document.close(); 
    WindowObject.focus(); 
    setTimeout(function() { 
     if(!dontPrint) 
     { 
      WindowObject.print(); 
      WindowObject.close(); 
     } 
     if(redirect) 
     window.location.assign(redirect); 
    }, 50); 
} 

形式,我把一个按钮,在任何网页上点击功能打印页面

<button class="btn btn-primary btn-xs" onclick="printPage('/myproject/prints/bill/sales/5','')">Print Bill</button> 

当用户点击另一个页面该按钮为first time它弹出一个blank page !!!! 任何时候,他再次点击按钮,它工作正常

你能帮助吗?

回答

1

为了解决您的问题,您需要添加此到打印的HTML代码:

<script> 
    window.onload = function(){ 
     window.print(); 
    } 
</script> 

这将在内容全部加载并呈现后立即开始打印过程。没有更多的超时!


外面你的答案范围:

切勿使用弹出窗口(即说window.open行)。很多人阻止这些(我深深地感谢那些发明弹出式窗口拦截器的人),甚至在某些设备上甚至可能无法工作。

你可以做的是创建一个并将内容转储到它。

有点儿像这样:

<a href="/myproject/prints/bill/sales/5" target="print" class="btn btn-primary btn-xs">Print Bill</button> 
<iframe id="print" name="print" style="display:none;"></iframe> 

当你点击链接,它会打开内页。由于您正在生成的输出,因此您可以将引用的JavaScript代码添加到输出中。

这将为您节省大量的工作并保持尽可能的兼容性。更不用说容易了!

-2

好吧,我发现我的问题

它的时间到我的网页完全加载,所以我增加延迟700,它工作正常 谢谢

+0

为什么这样?您可以将''添加到您的iframe中,并且它可以工作。 –

+0

避免使用像这样的超时:用户具有所有不同类型的连接。使用'onload'函数来完成你正在寻找的东西。 – FrankerZ

+0

如何在'.load'中使用'onload'函数,我打电话给另一个页面?和'没有iframe' –