javascript – 打印功能仅在第二次点击后有效

前端之家收集整理的这篇文章主要介绍了javascript – 打印功能仅在第二次点击后有效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个功能来打印DIV.
每当页面加载并点击我的“打印”链接时,显示DIV没有CSS打印.
如果我关闭Chrome的打印可视化页面并再次单击“打印”链接,则DIV会应用CSS.

有什么想法吗?

使用Javascript

  1. function printDiv(divId) {
  2.  
  3. var printDivCSSpre =
  4. '<link href="/static/assets/vendor/sb-admin-2-1.0.7/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">' +
  5. '<link href="/static/assets/vendor/sb-admin-2-1.0.7/dist/css/sb-admin-2.css" rel="stylesheet">' +
  6. '<div style="width:1000px; padding-right:20px;">';
  7.  
  8. var printDivCSSpost = '</div>';
  9.  
  10. $('body').append('<iframe id="print_frame" name="print_frame" width="0" height="0" frameborder="0" src="about:blank"></iframe>');
  11.  
  12. $("link").clone().appendTo($("#print_frame").contents().find("head"));
  13. window.frames["print_frame"].document.body.innerHTML =
  14. printDivCSSpre + document.getElementById(divId).innerHTML + printDivCSSpost;
  15. window.frames["print_frame"].window.focus();
  16. var windowInstance = window.frames["print_frame"].window;
  17. windowInstance.print();
  18. }

HTML

  1. <a id="print" href="#">
  2. <i class="fa fa-print"></i> Print
  3. </a>
  4. <script>
  5. $('#print').click(function () {
  6. printDiv('report')
  7. })
  8. </script>
  9.  
  10. <div id="report" class="report">
  11. <p># Generated Table#</p>
  12. </div>

首先点击:

http://imgur.com/a/Go81Y

关闭打印预览页面并再次单击打印

http://imgur.com/a/SCxJF

解决方法

每件事都是对的,只需改变顺序即可.在第一次单击时,它在浏览器调试器中没有在sources部分显示’print_frame’,而在第二次单击时它(我使用chrome devtool).

因此在onload期间使用css属性加载到内存框架中:

  1. var windowInstance;
  2. $(function(){
  3. $('body').append('<iframe id="print_frame" name="print_frame" width="0" height="0" frameborder="0" src="about:blank"></iframe>');
  4. $("link").clone().appendTo($("#print_frame").contents().find("head"));
  5. windowInstance = window.frames["print_frame"].window;
  6.  
  7. });

和onClick只是附加html

  1. $('#print').click(function () {
  2. var divId = 'report';
  3. var printDivCSSpre ='<div id="printReportDiv" style="width:1000px; padding-right:20px;">';
  4. var printDivCSSpost = '</div>';
  5.  
  6. window.frames["print_frame"].document.body.innerHTML = printDivCSSpre + document.getElementById(divId).innerHTML + printDivCSSpost;
  7. window.frames["print_frame"].window.focus();
  8. windowInstance.print();
  9.  
  10. });

已更新jsfiddle

猜你在找的JavaScript相关文章