JavaScript在表单页面添加打印功能,打印表单中的值并打印完成后不刷新页面

在一个项目中,有一个功能需求

在一个页面上,有一个表单,表单包括textbox, radiobutton, checkbox, textarea等控件

用户填写表单后,按下submit按钮提交表单

现在用户有个需求,他们希望在这个页面上增加一个print按钮或者链接

点击print时,可以打印

最简单的想法就是,加上一个print的链接,然后调用javascript中的window.print()能打印

我最初是这样写代码的

在网页上增加一个print的链接

<a href="javascript:void(0)" onclick="printProduct()"><i class="fa fa-print" aria-hidden="true"></i>Print this page</a>

或者,也可以写成这样

<a href="javascript:printProduct()"><i class="fa fa-print" aria-hidden="true"></i>Print this page</a>

然后,javascript的printProduct方法写成如下

function printProduct()
{
    document.body.innerHTML = document.getElementById("printDiv").innerHTML;
    window.print();
    history.go(0);
}

页面上,需要打印的表单写在id=printDiv的div中

实现这个功能后,发现几个问题

1.在页面填写好表单内容后,点击打印按钮时,打印出来的表单内容是空的,没有任何内容

2. 打印完成后,回到网页上,刚才网页上填写的内容,也全部都消失了

为什么会出现这种情况呢,怎么解决呢?

产生这个问题的原因是

$("#form").html()时,没有包含你在网页上填写的数据。 为了解决这个问题,你需要用html()之前,把你在网页上填入表单的所有数据都val(‘‘)先

也就是说,在调用window.print()之前,我们需要一个javascript来bindData

这里,我写了一个bindData的javascript函数

function bindData()
{
    $("input[type=‘text‘],select option").each(function () {
        $(this).attr(‘value‘, $(this).val());
    });

    $("input[type=‘radio‘],input[type=‘checkbox‘]").each(function () {

        if ($(this).attr(‘checked‘))
            $(this).attr(‘checked‘, true);
        else
            $(this).removeAttr(‘checked‘);

    });

    $("select option").each(function () {

        if ($(this).attr(‘selected‘))
            $(this).attr(‘selected‘, true);
        else
            $(this).removeAttr(‘selected‘);
    });

    $(‘textarea‘).each(function () {
        $(this).html($(this).val());
    });

}

这样,把这个javascript函数放在打印之前。上面发生的第1个问题就解决了

我们在看第2个问题,点击打印按钮后,回到网页,发现网页上,你之前填写的内容都没有了

为了解决这个问题,我们采用另一种方式

我们在Javascript代码中,临时创建一个window窗口,然后把你要打印的内容写入这个临时的window窗口,打印完成后,再关闭这个新创建的窗口

代码如下

function printProduct()
{
    bindData();

    var printContent = document.getElementById("printDiv").innerHTML;
    var newWindow = window.open();
    newWindow.document.write(printContent);
    newWindow.print();
    newWindow.close();

}

到这里,整个网页表单打印功能就完成了

原文地址:https://www.cnblogs.com/wphl-27/p/12175456.html

时间: 2024-08-26 10:06:25

JavaScript在表单页面添加打印功能,打印表单中的值并打印完成后不刷新页面的相关文章

div仿checkbox表单样式美化及功能

div仿checkbox表单样式美化及功能(checkbox的样式不好看)素材在底部: 效果图: window.css .bj { position: absolute; top: 0; left: 0; bottom: 1px; width: 100 % ; height: 980px; z - index: 9; background - color: #000; filter: alpha(opacity = 50); - moz - opacity: 0.5; - khtml - opa

网页禁用表单的自动完成功能禁用密码自动填充autocomplete

网页中表单的自动完成功能,有时候很方便,但是有时候并不想让浏览器记忆表单,比如禁用密码域自动填充功能, 网页禁用表单的自动完成功能是由input元素的autocomplete属性控制,关闭表单的自动完成就是设置autocomplete="off",默认是就是开的值为on 关闭密码域的自动完成: <input type="password" name="password" autocomplete="off"> 关闭

表单(二)多个表单项的动态校验总结

任务目的 加强对JavaScript的掌握 熟悉常用表单处理逻辑 任务描述 如示例图中所示,基于上一个任务,在页面中添加多个表单 要求: 表单获得焦点时,下方显示表单填写规则 表单失去焦点时校验表单内容 校验结果正确时,表单边框显示绿色,并在下方显示验证通过的描述文字 校验结果错误时,表单边框显示红色,并在下方显示验证错误的描述文字 点击提交按钮时,对页面中所有输入进行校验,校验结果显示方式同上.若所有表单校验通过,弹窗显示"提交成功",否则显示"提交失败" 任务注

表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树

EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等.当提交表单时,调用 'validate' 方法来检查表单是否有效. 用法 创建一个简单的 HTML 表单.构建表单并给 id.action.method 赋值. <form id="ff" method="post"> <div> <lab

表单重复提交---&gt;使用Session防止表单重复提交

表单重复提交一般情况下有3种场景: 1> 网络延迟时,不断点击submit按钮 2> 表单提交后,用户点击刷新 3> 表单提交后,用户返回表单页面重新提交 针对这三种场景,在网上查阅各种方案后,感觉以下方案能够比较好的解决问题 第一种: javascript方案 (只能用于第一种场景): <form action = "doForm" id ="f" method = "post" > <input type

表单的属性和方法, 获取表单和表单的元素, 验证表单

表单的属性和方法 一. 表单字段的属性(id/name/value/form),这里用value属性来举例 上面的form属性代表获取表单字段的父级表单对象 1. 属性的获取         console.log(document.myform.username.value); 2. 属性的设置            document.myform.username.value="123"; 3. 获取表单字段的父级表单对象 console.log(document.myform.u

第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单

jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action="yzh.php" title="会员注册"> <ol class="reg_error"></ol> <p> <label for="user">帐号:</label>

【jQuery】利用表单的序列化根据name取表单,做表单的验证

在前台做表单的验证的方式有很多种,具体思想是你先要把表单的要验证项里面的值取出来,然后再脚本处进行判断,最后根据判断结果告警,然后给onsubmit="return XX()"那个函数,返回true与false的布尔值.整个过程,把表单的要验证项取出来是关键.在<[JavaScript]表单即时验证,不成功不让提交>(点击打开链接)中利用了id取每一个表单项的属性,这是最基础的,但是如果需要以name的方法取出表单的项呢?此时,你可以利用jQuery的序列化,根据name来

解决window.history.go(-1)执行后不刷新页面的问题

在iphone上出现了window.history.go(-1)执行后不刷新页面的问题,安卓不会有这个问题. 解决方法为在返回后的页面加上: window.addEventListener('pageshow', function(e) { //如果检测到页面是从“往返缓存”中读取的,刷新页面 if (e.persisted) { window.location.reload(); } }); 原文地址:https://www.cnblogs.com/luoyihao/p/12665868.ht