jQuery 實現表格列合計


用jQuery實現表格列的合計功能,當單元格的值發生變化時,合計行自動統計個單元格的值。

1.編寫html

   1:   <table id="table-fund">
   2:          <caption class="table-caption-legend">
   3:              (單位:萬元)</caption>
   4:          <thead>
   5:              <tr>
   6:                  <th colspan="3">經費到位情況</th>
   7:              </tr>
   8:              <tr>
   9:                  <th>科目
  10:                  </th>
  11:                  <th>預算數</th>
  12:                  <th>到位數</th>
  13:              </tr>
  14:          </thead>
  15:          <tr>
  16:              <td>1.省科技經費
  17:              </td>
  18:              <td>
  19:                  <input id="SouProSciTech" type="text" />
  20:              </td>
  21:              <td>
  22:                  <input id="ProSciTechAvailable" type="text" /></td>
  23:          </tr>
  24:          <tr>
  25:              <td>2.單位自籌
  26:              </td>
  27:              <td>
  28:                  <input id="SouUnitSelfFinanc" type="text" />
  29:              </td>
  30:              <td>
  31:                  <input id="UnitSelfFinancAvailable" type="text" /></td>
  32:          </tr>
  33:          <tr>
  34:              <td>3.銀行貸款
  35:              </td>
  36:              <td>
  37:                  <input id="SouBankloans" type="text" />
  38:              </td>
  39:              <td>
  40:                  <input id="BankloansAvailable" type="text" /></td>
  41:          </tr>
  42:          <tr>
  43:              <td>
  44:                  <span class="totall"></span><span class="totall"></span>
  45:              </td>
  46:              <td>
  47:                  <input id="TotalSou" readonly="readonly" type="text" />
  48:              </td>
  49:              <td>
  50:                  <input id="TotalSouAvailable" readonly="readonly" type="text" />
  51:              </td>
  52:          </tr>
  53:      </table>

 

2. Script實現

  2.1 為每個input綁定事件

實現在單元格值發生變化時,合計行的單元格的值自行發生變化,這里采用.each()遍歷input並為其綁定函數keyup(這里不采用change),在keyup事件發生時進行合計。

   1:   $("#table-fund tr").each(function () {
   2:          $(this).find("td:eq(1) input:not(#TotalSou)").keyup(function () {
   3:              totalSouFund();//調用合計方法
   4:          });
   5:      });

這里遍歷除統計單元格之外的每個input,以上代碼遍歷第二列的輸入框,在:not()中排除合計單元格的input。在input的keyup觸發時調用合計方法。

2.2 實現合計

   1:  function totalSouFund() {
   2:      totalSou = 0;
   3:      $("#table-fund tr").each(function () {
   4:          $(this).find("td:eq(1) input:not(#TotalSou)").each(function () {
   5:              totalSou += getNumValue($(this)) ;
   6:              $("#TotalSou").val(Number(totalSou.toFixed(4)));
   7:          });
   8:      });
   9:  }

(1) totalSou用來存儲合計值,在每次調用該函數時把totalSou置0,然后遍歷每個單元格中的值進行累加;

(2) getNumValue()用來獲取文本框的值,返回float;

   1:  function getNumValue(controlid) {
   2:      /// <summary>
   3:      /// Get a number from input tag which type is text
   4:      /// </summary>
   5:      /// <param name="controlid">id of input control</param>
   6:      /// <returns type="">float or 0</returns>
   7:      var num = controlid.val();
   8:      if (validateInput(num)) {
   9:          num = parseFloat(num);
  10:      }
  11:      else {
  12:          controlid.val("");
  13:          num = 0;
  14:      }
  15:      return num;
  16:  }

(2.1) validateInput() 返回一個Bool值用來驗證輸入的值是否有效,確保getNumValue返回一個有效數值

   1:  function validateInput(inputstr) {
   2:      /// <summary>
   3:      /// validate a value
   4:      /// </summary>
   5:      /// <param name="inputstr"></param>
   6:      /// <returns type="">bool</returns>
   7:      flag = false;
   8:      if (inputstr != "") {
   9:          if (isNaN(inputstr)) {
  10:              flag = false; //如果輸入字符不是數字
  11:          }
  12:          else {//輸入數字但是小於0
  13:              if (parseFloat(inputstr) < 0)
  14:                  flag = false;
  15:              else
  16:                  flag = true;
  17:          }
  18:      }
  19:      return flag;
  20:  }

2.3 處理javaScript中浮點數計算的出現的問題

   1:  $("#TotalSou").val(Number(totalSou.toFixed(4)));

注:這里用Number(totalSou.toFixed(4))保留四位小數,但是其它單元格中輸入超過四位小數時在此並沒有做相應的處理。你也可以做進一改進,只傳入合計控件ID和列的索引值寫更少的代碼。

<summary>隨筆,若有不足之處和好的建議,歡迎交流學習}</summary>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM