为什么JavaScript打印表单时,修改后的内容不起效?
JavaScript打印表单:解决内容更新失效问题
使用JavaScript打印表单时,有时会遇到表单内容(例如textarea文本域和复选框)更新后,打印结果却显示旧值的问题。本文分析此问题的原因并提供解决方案。
问题描述:
用户在表单中输入或修改内容(包括文本和复选框选中状态),但打印输出的结果并未反映这些更改。
示例代码(存在问题):
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <div id="divKanZhengPanel-binli"> <div class="checkDiv"> <label>正位</label> <label>外显斜</label> <label>内显斜</label> <label>外隐斜</label> <label>内隐斜</label> </div> </div> <button id="dw">点我打印</button> <script> document.getElementById('dw').addEventListener('click', function() { let docHtml1 = $("#divKanZhengPanel-binli").prop("outerHTML"); $('#print-iframe').remove(); let iframe1 = document.createElement('IFRAME'); let doc1 = null; iframe1.id = "print-iframe"; iframe1.style = 'position:absolute;width:0px;height:0px;left:-0px;top:-0px;visibility: auto;'; document.body.appendChild(iframe1); doc1 = iframe1.contentWindow.document; doc1.write(docHtml1); doc1.close(); iframe1.contentWindow.focus(); iframe1.contentWindow.print(); }) </script>
问题原因:
原代码使用outerHTML
获取表单元素的HTML内容。此方法只获取元素的静态HTML结构,不会包含动态更新后的表单值。
解决方案:
使用cloneNode(true)
方法克隆表单元素。cloneNode(true)
会复制元素及其所有子节点和属性,包括表单元素的当前值。
改进后的代码:
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <div id="divKanZhengPanel-binli"> <div class="checkDiv"> <label>正位</label> <label>外显斜</label> <label>内显斜</label> <label>外隐斜</label> <label>内隐斜</label> </div> </div> <button id="dw">点我打印</button> <script> document.getElementById('dw').addEventListener('click', function() { $('#print-iframe').remove(); let iframe1 = document.createElement('IFRAME'); let doc1 = null; iframe1.id = "print-iframe"; iframe1.style = 'position:absolute;width:0px;height:0px;left:-0px;top:-0px;visibility: auto;'; document.body.appendChild(iframe1); setTimeout(function() { // 使用setTimeout确保iframe加载完成 doc1 = iframe1.contentWindow.document; doc1.body.appendChild(document.querySelector('#divKanZhengPanel-binli').cloneNode(true)); doc1.close(); iframe1.contentWindow.focus(); iframe1.contentWindow.print(); }); }) </script>
通过使用cloneNode(true)
,打印出的表单内容将准确反映用户在页面上进行的修改。 添加了setTimeout
函数,确保在iframe内容加载完成后再执行打印操作,避免出现打印内容为空白的情况。 请确保你的代码中引入了jQuery库,因为代码使用了$
符号。如果未使用jQuery,则需要使用原生JavaScript方法来选择元素。
以上是为什么JavaScript打印表单时,修改后的内容不起效?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

H5页面需要持续维护,这是因为代码漏洞、浏览器兼容性、性能优化、安全更新和用户体验提升等因素。有效维护的方法包括建立完善的测试体系、使用版本控制工具、定期监控页面性能、收集用户反馈和制定维护计划。

在Safari中使用自定义样式表的问题探讨今天我们来探讨一个关于Safari浏览器的自定义样式表应用问题。前端新手...

H5 页面制作的优势包括:轻量级体验,加载速度快,提升用户留存率。跨平台兼容性,无需针对不同平台适配,提升开发效率。灵活性和动态更新,无需审核,便于内容修改和更新。成本效益,开发成本比原生 App 低。

JavaScript 是否可在无 HTML5 环境下运行?JavaScript 引擎自身可独立运行。在浏览器环境中运行 JavaScript 依赖 HTML5,因其提供加载和执行代码所需的标准化环境。HTML5 提供的 API 和特性对现代 JavaScript 框架和库至关重要。离开 HTML5 环境,许多 JavaScript 功能难以实现或无法实现。

Bootstrap Table 乱码通常是因为页面编码与表格数据编码不一致。要解决此问题,需要确保它们一致,具体步骤包括:检查页面和表格数据编码,设置页面编码,验证编码。如果使用 UTF-8,服务器也应支持。无法解决时,可尝试使用 JavaScript 编码库。

无法以 root 身份登录 MySQL 的原因主要在于权限问题、配置文件错误、密码不符、socket 文件问题或防火墙拦截。解决方法包括:检查配置文件中 bind-address 参数是否正确配置。查看 root 用户权限是否被修改或删除,并进行重置。验证密码是否准确无误,包括大小写和特殊字符。检查 socket 文件权限设置和路径。检查防火墙是否阻止了 MySQL 服务器的连接。

如何在element-plus中正确使用类名样式?在使用element-plus的过程中,很多开发者会遇到一个问题:为什么在自己的...
