基于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 相关文章推荐
ExtJS 2.0实用简明教程 之获得ExtJS
Apr 29 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
nodeType属性返回被选节点的节点类型介绍
Nov 22 Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 Javascript
javascript引用类型之时间Date和数组Array
Aug 27 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
JS实现图片懒加载(lazyload)过程详解
Apr 02 Javascript
Vue+Flask实现图片传输功能
Apr 01 Vue.js
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
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
PHP自定义多进制的方法
2016/11/03 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
Python中使用asyncio 封装文件读写
2016/09/11 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
3种python调用其他脚本的方法
2020/01/06 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
学校联谊协议书
2014/09/16 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
python套接字socket通信
2022/04/01 Python