基于jQuery实现表格数据的动态添加与统计的代码


Posted in Javascript onJanuary 31, 2011

基于jQuery实现表格数据的动态添加与统计的代码
                                                          图(1.1)
    某物流信息系统中的功能要求如图1.1所示,表格中每一行代表一笔运送货物的信息,在录入每行的计费重量费率后,要求能按一定的公式,自动计算运送费用,并且能自动统计所有运送货物的总运费。运送货物信息的数据量(即表格的行数)不定,要求能动态增加、删除,即表格的数据行数是动态可维护的。同时为了方便操作,需要在页面中能像使用键盘的上下左右方向键,在录入的文本框之间进行切换。每行的数据有一定的校验要求,比如单号必须为8位数字,件数和重量必须为数字...
    单行货物信息计算运费不难实现,只需要在计费重量和费率的文本框对象的onblur事件中,得到费率和计费重量,按照公式计算好运费即可。<?XML:NAMESPACE PREFIX = O />

       总计费用的统计也不难实现,遍历整个表格的所有费用对象,统计其和,将计算结果放到总计的文本框对象即可。

       难点在动态添加整行表格数据,而且每行数据上的各文本框对象的事件也要实现自动统计和运算,有相当的难度。如果使用JavaScript需要调用Dom对象创建一个<tr>单元格,还需要在tr里面添加10多个单元格<td>对象,每个单元格<td>对象内要添加文本框对象,还需要在文本框对象上响应onblur事件进行运费计算,代码量相当大。

       使用jQuery可以大大减轻工作量,在实际开发中,使用了jQueryclone(true)函数,该函数可以创建一个jQury对象的副本,并且参数为true,可以复制该元素的所有事件处理函数。

我们可以在第一行中实现计算运费的运算。然后点增加明细按钮时,调用jQuery clone(true)函数,建立第一行的副本对象插入到表格下方,由于使用clone(true)可以复制对象的事件处理函数,所以每行中文本框的onblur事件和运费计算函数也被成功复制,不需再做处理。大大减轻了工作量。
    关键代码
(一)创建克隆单元格对象并添加到表格中

var v=$("#tbin");//得到表格的jquery对象 
//所有的数据行有一个.MyRow的Class,得到数据行的大小 
var vcount=$("#tbin tr").filter(".MyRow").size()+1;//表格有多少个数据行 
var vTr=$("#tbin #trDataRow1"); //得到表格中的第一行数据 
var vTrClone=vTr.clone(true);//创建第一行的副本对象vTrClone 
vTrClone.appendTo(v);//把副本单元格对象添加到表格下方

(二)统计更新总金额
function UpdateTotal()//更新总金额 
{ 
var vTotalMoney=0;//总金额的初始值为0; 
var vTable=$("#tbin");//得到表格的jquery对象 
var vTotal= vTable.find("#txtTotal") ;//得到总金额对象 
var vtxtAfters=vTable.find("#txtMoney");//得到所有计算好的费用对象; 
vtxtAfters.each( //使用jQuery的each函数遍历每行费用对象,累加成总金额 
function(i) 
{ 
var vTempValue=$(this).val(); 
if(vTempValue=="") 
{ 
vTempValue=0; 
} 
vTotalMoney=vTotalMoney+parseFloat(vTempValue);//计算总费用 
} 
)//遍历结束 
vTotal.val(vTotalMoney); //将总费用显示到对应文本框对象中 
}

(三)计费重量变化时计算费用,并统计总费用
$("#txtMoneyWeight").bind("change", function() 
{ 
var vTotalMoney=0;//总金额的初始值为0; 
var vtxtDetail=$(this);//得到变化的文本框对象 
var vVal=vtxtDetail.val(); 
var vtxtAfter=vtxtDetail.parent("td").parent("tr").find("#txtRate");//得到费率; 
var vtxtMoney=vtxtDetail.parent("td").parent("tr").find("#txtMoney");//得到费用; 
var vMoney=CalculatorMoney(vVal,vtxtAfter.val());//使用公式计算单行运费 
vtxtMoney.val(vMoney); //显示单行运费信息 
UpdateTotal(); //调用函数统计更新总费用 
}); //变化脚本结束

键盘的控制和数据的校验在源程序中有详细注释,具体代码可参考源程序。

Javascript 相关文章推荐
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
Jan 16 Javascript
js a标签点击事件
Mar 30 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
vue.js自定义组件directives的实例代码
Nov 09 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
JS函数本身的作用域实例分析
Mar 16 Javascript
基于Vue CSR的微前端实现方案实践
May 27 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 Javascript
jquery键盘事件介绍
Jan 31 #Javascript
javascript代码加载优化方法
Jan 30 #Javascript
javascript使用activex控件的代码
Jan 27 #Javascript
鼠标右击事件代码(asp.net后台)
Jan 27 #Javascript
javascript对数组的常用操作代码 数组方法总汇
Jan 27 #Javascript
JavaScript 注册事件代码
Jan 27 #Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
Jan 27 #Javascript
You might like
改进的IP计数器
2006/10/09 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
PHP类的特性实例分析
2016/09/28 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
vue实现购物车小案例
2019/09/27 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
为什么要做架构设计
2015/07/08 面试题
毕业自荐书
2013/12/09 职场文书
委托书样本
2014/04/02 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
投资申请报告
2015/05/19 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL