【问题标题】:print div with textarea incl. user input using js使用 textarea 打印 div,包括。使用js的用户输入
【发布时间】:2018-11-21 09:39:30
【问题描述】:

我有一个打印网页一部分的简单脚本。 但是,它不会打印用户输入。

我的目标是只打印表单和用户输入;而不是网页的其余部分。

我不想使用 css;只是 js/jQuery 和 html。

我的问题是:如何打印包括用户输入在内的各种表单输入元素?

HTML:

<div id="print-content">
        <textarea>Print User Input</textarea>
        <input type="button" onclick="printDiv('print-content')" value="print a div!"/>
</div>

js:

<script type="text/javascript">
    function printDiv(divName) {
        var printContents = document.getElementById(divName).innerHTML;
        var originalContents = document.body.innerHTML;
        document.body.innerHTML = printContents;
        window.print();
        document.body.innerHTML = originalContents;
    }
</script>

【问题讨论】:

  • 你能解释一下你在这里想要做什么吗?另外,表单标签不需要,所以我将它们编辑并删除标签。
  • @cmprogram:我只是想用用户输入打印一个表单。目标是只打印表格;而不是网页的其余部分。

标签: javascript jquery printing


【解决方案1】:

输入的 current 值未在 HTML 中表示(只有 default 值),因此它不会显示在 innerHTML 中。

您需要遍历原始页面中的所有输入,读取它们的value 属性,然后将值复制到新页面上的新输入中。


您最好使用 CSS 和 @media print 隐藏您不想打印的元素,而不是使用 innerHTML 多次重写文档。

【讨论】:

  • 谢谢,但问题是我不想使用 css。只有 js/jQuery 和 html
  • @ElsdenIep – 然后按照我在答案第二段中给出的建议进行操作。
  • 这对我来说有点太复杂了。你有我可以为我的目的改变的例子吗?
【解决方案2】:

尝试删除此行document.body.innerHTML = printContents;

function printDiv(divName) {
  var printContents = document.getElementById(divName).innerHTML;
  var originalContents = document.body.innerHTML;
  window.print();
}
<div id="print-content">
  <form>
    <textarea>Print User Input</textarea>
    <input type="button" onclick="printDiv('print-content')" value="print a div!" />
  </form>
</div>

【讨论】:

  • 问题是:我的脚本只打印 id="print-content" 的内容。您的脚本会打印整个页面。
【解决方案3】:

仅在 chrome 上测试。

 function printDiv(divName) {

    var printContents = document.getElementById(divName).cloneNode(true);

    w = window.open();
    w.document.body.appendChild(printContents);
    w.print();
    w.close();
    return true;
}

【讨论】:

  • 不敢相信这么简单:您的脚本对我来说非常有用。谢谢!
  • 在 Chrome、FF、Opera、Android 中运行良好。不适用于 Edge 和 IE。
  • @Sven Liivak 您的解决方案对我有用,但我还需要在打印时应用表单样式。我尝试在 w.document.head 中附加样式,但没有奏效。你知道如何解决这个问题吗?
  • @ajain Head 是不可见元素,您想将样式附加到可见元素。例如w.document.body.style.background = "淡蓝色"
  • 能否请您给我这个代码的正确定义?哪个函数在做打印操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多