應用jQuery實現表格數據的動態添加與統計

作者: 生如夏花之燦爛  來源: 博客園  發布時間: 2011-02-10 17:16  閱讀: 5594 次  推薦: 0   原文鏈接   [收藏]  
摘要:使用jQuery可以大大減輕工作量,在實際開發中,使用了jQuery的clone(true)函數,該函數可以創建一個jQury對象的副本,并且參數為true時,可以復制該元素的所有事件處理函數。

  某物流信息系統中的功能要求如圖1.1所示,表格中每一行代表一筆運送貨物的信息,在錄入每行的計費重量和費率后,要求能按一定的公式,自動計算運送費用,并且能自動統計所有運送貨物的總運費。運送貨物信息的數據量(即表格的行數)不定,要求能動態增加、刪除,即表格的數據行數是動態可維護的。同時為了方便操作,需要在頁面中能像使用鍵盤的上下左右方向鍵,在錄入的文本框之間進行切換。每行的數據有一定的校驗要求,比如單號必須為8位數字,件數和重量必須為數字...

  單行貨物信息計算運費不難實現,只需要在計費重量和費率的文本框對象的onblur事件中,得到費率和計費重量,按照公式計算好運費即可。

  總計費用的統計也不難實現,遍歷整個表格的所有費用對象,統計其和,將計算結果放到總計的文本框對象即可。

  難點在動態添加整行表格數據,而且每行數據上的各文本框對象的事件也要實現自動統計和運算,有相當的難度。如果使用JavaScript需要調用Dom對象創建一個單元格,還需要在tr里面添加10多個單元格對象,每個單元格對象內要添加文本框對象,還需要在文本框對象上響應onblur事件進行運費計算,代碼量相當大。

  使用jQuery可以大大減輕工作量,在實際開發中,使用了jQuery的clone(true)函數,該函數可以創建一個jQury對象的副本,并且參數為true時,可以復制該元素的所有事件處理函數。

  我們可以在第一行中實現計算運費的運算。然后點增加明細按鈕時,調用jQuery 的clone(true)函數,建立第一行的副本對象插入到表格下方,由于使用clone(true)可以復制對象的事件處理函數,所以每行中文本框的onblur事件和運費計算函數也被成功復制,不需再做處理。大大減輕了工作量。

  關鍵代碼

  (一)創建克隆單元格對象并添加到表格中

 
1. varv=$("#tbin");//得到表格的jquery對象
2. //所有的數據行有一個.MyRow的Class,得到數據行的大小
3. varvcount=$("#tbintr").filter(".MyRow").size()+1;
4. //表格有多少個數據行
5. varvTr=$("#tbin#trDataRow1");
6. //得到表格中的第一行數據
7. varvTrClone=vTr.clone(true);//創建第一行的副本對象vTrClone
8. vTrClone.appendTo(v);//把副本單元格對象添加到表格下方

  (二)統計更新總金額

 
1. functionUpdateTotal()//更新總金額
2. {
3. varvTotalMoney=0;//總金額的初始值為0;
4. varvTable=$("#tbin");//得到表格的jquery對象
5. varvTotal=vTable.find("#txtTotal");//得到總金額對象
6. varvtxtAfters=vTable.find("#txtMoney");//得到所有計算好的費用對象;
7. vtxtAfters.each(//使用jQuery的each函數遍歷每行費用對象,累加成總金額
8. function(i)
9. {
10. varvTempValue=$(this).val();
11. if(vTempValue=="")
12. {
13. vTempValue=0;
14. }
15. vTotalMoney=vTotalMoney+parseFloat(vTempValue);//計算總費用
16. }
17. )//遍歷結束
18. vTotal.val(vTotalMoney);//將總費用顯示到對應文本框對象中
19. }

  (三)計費重量變化時計算費用,并統計總費用

 
1. $("#txtMoneyWeight").bind("change",function()
2. {
3. varvTotalMoney=0;//總金額的初始值為0;
4. varvtxtDetail=$(this);//得到變化的文本框對象
5. varvVal=vtxtDetail.val();
6. varvtxtAfter=vtxtDetail.parent("td").parent("tr").find("#txtRate");
7. //得到費率;
8. varvtxtMoney=vtxtDetail.parent("td").parent("tr").find("#txtMoney");
9. //得到費用;
10. varvMoney=CalculatorMoney(vVal,vtxtAfter.val());
11. //使用公式計算單行運費
12. vtxtMoney.val(vMoney);
13. //顯示單行運費信息
14. UpdateTotal();//調用函數統計更新總費用
15. });//變化腳本結束

  鍵盤的控制和數據的校驗在源程序中有詳細注釋,具體代碼可參考源程序。

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()