点击打印时仅在打印输出显示Label日期时间,不在网页前端展示
问题原因
你当前的代码直接修改了当前网页中lblDateTime元素的display属性为block,修改后页面上的这个元素就会显示出来,你并没有在取完打印内容后将这个元素恢复为隐藏状态,因此会出现日期同时展示在网页上的问题。
解决方案1:快速修复现有代码
在获取完打印内容后,立刻将原页面的日期标签恢复为隐藏状态,页面不会出现肉眼可见的闪烁,修改后的JS代码如下:
function PrintDiv() { const dateLabel = document.getElementById('<%=lblDateTime.ClientID %>'); dateLabel.style.display = "block"; dateLabel.innerHTML = new Date().toLocaleString(); var contents = document.getElementById("dvContents").innerHTML; // 新增:获取内容后立即恢复原元素的隐藏状态 dateLabel.style.display = "none"; dateLabel.innerHTML = ""; // 原有逻辑保持不变 var frame1 = document.createElement('iframe'); frame1.name = "frame1"; frame1.style.position = "absolute"; frame1.style.top = "-1000000px"; document.body.appendChild(frame1); var frameDoc = (frame1.contentWindow) ? frame1.contentWindow : (frame1.contentDocument.document) ? frame1.contentDocument.document : frame1.contentDocument; frameDoc.document.open(); frameDoc.document.write('<html><head><title>DIV Contents</title>'); frameDoc.document.write('</head><body>'); frameDoc.document.write(contents); frameDoc.document.write('</body></html>'); frameDoc.document.close(); setTimeout(function () { window.frames["frame1"].focus(); window.frames["frame1"].print(); document.body.removeChild(frame1); }, 500); return false; }
解决方案2:更稳妥的实现(不修改原页面元素)
直接在写入iframe的打印内容中插入日期,不需要操作原页面的任何元素,完全不会影响原页面的展示状态,甚至可以删掉原页面中隐藏的lblDateTime标签:
function PrintDiv() { // 直接获取原内容,无需修改原页面元素 var contents = document.getElementById("dvContents").innerHTML; var frame1 = document.createElement('iframe'); frame1.name = "frame1"; frame1.style.position = "absolute"; frame1.style.top = "-1000000px"; document.body.appendChild(frame1); var frameDoc = (frame1.contentWindow) ? frame1.contentWindow : (frame1.contentDocument.document) ? frame1.contentDocument.document : frame1.contentDocument; frameDoc.document.open(); frameDoc.document.write('<html><head><title>DIV Contents</title>'); frameDoc.document.write('</head><body>'); frameDoc.document.write(contents); // 直接在打印内容中插入对应样式的日期 frameDoc.document.write(`<div style="margin-top: 60px;margin-left: 25%;">${new Date().toLocaleString()}</div>`); frameDoc.document.write('</body></html>'); frameDoc.document.close(); setTimeout(function () { window.frames["frame1"].focus(); window.frames["frame1"].print(); document.body.removeChild(frame1); }, 500); return false; }
内容的提问来源于stack exchange,提问作者rimi
相关产品推荐
相关产品推荐

