基于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 相关文章推荐
用js得到网页中所有的div的id
Oct 19 Javascript
JavaScript 封装Ajax传递的数据代码
Jun 05 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
Oct 24 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
Mar 18 Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
Javascript基础教程之变量
Jan 18 Javascript
微信WeixinJSBridge API使用实例
May 25 Javascript
一些实用性较高的js方法
Apr 19 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
node.js 用socket实现聊天的示例代码
Oct 17 Javascript
微信小程序自定义模态弹窗组件详解
Dec 24 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
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
python 连接sqlite及简单操作
2017/06/30 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
pymysql模块使用简介与示例
2020/11/17 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
Oracle快照(snapshot)
2015/03/13 面试题
建材业务员岗位职责
2013/12/08 职场文书
给医务人员表扬信
2014/01/12 职场文书
电气个人求职信范文
2014/02/04 职场文书
采购部长岗位职责
2014/06/13 职场文书
班级心理活动总结
2014/07/04 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
MySQL分库分表详情
2021/09/25 MySQL