winPrint.print只能在第一次使用时工作

时间:2015-01-29 17:33:04

标签: javascript printing

     <!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<meta charset="UTF-8">
<title>Title of the document</title>
</head>

<body>
<input id="print" type="submit" value="Submit">
</body>

</html>


  <script>

   $("#print").click(function () {
                    print();
   });
   function print() {
                var winPrint = window.open('ABC');
                winPrint.document.write('<html><head><title>Title</title></head><body>');
                winPrint.document.write("BODY");
                winPrint.document.write('</body></html>');
                winPrint.document.close();
                winPrint.focus();
                window.stop();

                $(winPrint).on('load', function () {
                    winPrint.print();
                    winPrint.close();
               });



            }
  </script>

当我第一次点击按钮打印工作但我下次点击按钮时打印不起作用。请解释一下为什么我一直在使用winPrint.document.write('<html><head><title>Title</title></head><body>');新页面加载并且代码winPrint.print();无效。

 $(document).ready(function () {
                winPrint.print();
                winPrint.close();
        });

当我使用文档就绪代码时,当我在

中有大量数据时,结果是一样的
  

winPrint.document.write( “BODY”);

如何更改我的代码才能正常工作?

2 个答案:

答案 0 :(得分:0)

因此,在致电winPrint.close()后,您无法致电winPrint.print()。您理想的是为用户提供新窗口底部的选项以关闭窗口 - 这通常是您在网络上看到的内容。通过close()之后调用print(),您可能会在打印对话显示之前关闭窗口的风险。

另外,请尝试将document.write调用限制为仅限一个,因此请将要放入新窗口的所有html放入变量中。

看看下面这个例子。

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<meta charset="UTF-8">
<title>Title of the document</title>
</head>

<body>
<input id="print" type="submit" value="Submit">
</body>
</html>

<script>

$("#print").click(function () {
   print();
});

function print() {
  var winPrint = window.open("", "ABC");
  winPrint.document.write("<p>Some content</p><p>Some more content</p>");
  winPrint.print();

}

</script>

在向window.open(URL,name,specs,replace)函数传递参数时,您还要小心。它需要4个可选参数。当你试图命名你的窗口时,你实际上是在传递URL参数,这就是为什么它没有做你想要的。只需传入一个空字符串,它将假定它是一个_blank窗口。

答案 1 :(得分:0)

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<meta charset="UTF-8">
<title>Title of the document</title>
</head>

<body>
<input id="print" type="submit" value="Submit">
</body>
</html>

<script>

$("#print").click(function () {
   print();
});

function print() {
  var winPrint = window.open("", "ABC");
  winPrint.document.write("<img src='http://upload.wikimedia.org/wikipedia/commons/3/3f/Fronalpstock_big.jpg'></img>");
  winPrint.print();
}

</script>

您的代码有效,因为在正文标记中您的内容很少。上面的代码显示在加载图像之前调用print函数,因为print页面是空的。

我希望使用文档就绪函数在加载图像时调用print(),但它不起作用。

如何更改我的代码才能正常工作?