js实现的捐赠管理完整实例

  本文实例讲述了js捐赠管理完整实现方法。分享给大家供大家参考。具体实现方法如下:

  index.html页面如下:

  

复制代码 代码如下:
<!DOCTYPE html>

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title>js捐赠管理</title>

  <link href="css/css.css" rel="Stylesheet" type="text/css" />

  <script type="text/javascript">

  //受捐单位数组

  var listOrgs = [

  { "id": "1", "comName": "壹基金" },

  { "id": "2", "comName": "宋庆龄基金" },

  { "id": "3", "comName": "慈济基金" },

  { "id": "4", "comName": "红十字会" },

  { "id": "5", "comName": "狼图腾" }

  ];

  //给listOrgs数组对象动态添加一个匿名方法

  listOrgs.getOrgsById = function (id) {

  for (var i = 0; i < listOrgs.length; i++) {

  if (listOrgs[i].id == id) {

  return listOrgs[i];//返回一个对象

  }

  }

  };

  //捐款数据数组

  var listData = [

  { "id": "1", "perName": "成龙", "orgId": "1", "money": "10000", "date": "2012-3-3" },

  { "id": "2", "perName": "李连杰", "orgId": "2", "money": "10000", "date": "2012-3-3" },

  { "id": "3", "perName": "陈光标", "orgId": "3", "money": "10000", "date": "2012-3-3" },

  { "id": "4", "perName": "胡锦涛", "orgId": "1", "money": "10000", "date": "2012-3-3" },

  { "id": "5", "perName": "周星池", "orgId": "2", "money": "10000", "date": "2012-3-3" },

  { "id": "6", "perName": "黎明", "orgId": "3", "money": "10000", "date": "2012-3-3" },

  { "id": "7", "perName": "狼人", "orgId": "3", "money": "10000", "date": "2012-3-3" },

  { "id": "8", "perName": "狂魔", "orgId": "3", "money": "10000", "date": "2012-3-3" },

  { "id": "9", "perName": "三疯", "orgId": "3", "money": "10000", "date": "2012-3-3" }

  ];

  //分页查询数组

  listData.fenyeQuery = function (pageNow, pageSize) {

  var res = new Array();

  //1.按pageSize为5,第1页就是listData[0]-listData[4],第2页就是listData[5]-listData[9]

  //第3页就是listData[10]-listData[14]

  var start = (pageNow - 1) * pageSize;

  var end = listData.length > (pageNow * pageSize) ? (pageNow * pageSize) : listData.length;

  for (var i = start ; i < end; i++) {

  res[res.length] = listData[i];

  }

  return res;

  };

  listData.queryByOrId = function (orid) {

  var arr = new Array();

  for (var i = 0; i < listData.length; i++) {

  if (listData[i].orgId == orid) {

  arr[arr.length] = listData[i];

  }

  }

  return arr;

  };

  listData.idNum = listData.length;

  listData.addRec = function(rec) {

  listData.idNum++;

  var newRec = { "id": listData.idNum, "perName": rec.perName, "orgId": rec.orgId, "money": rec.money, "date": rec.date };

  listData[listData.length] = newRec;

  return newRec;

  }; 

  listData.updateRec = function(obj) {

  for (var i = 0; i < listData.length; i++) {

  if (listData[i].id = obj.id) {

  listData[i] = obj;

  break;

  }

  }

  };

  //定义一个全局的变量 ,检测是否取消个性

  var isCancelUpdate = false;

  //定义三个文本input控件

  var InputPerName = document.createElement("input");

  InputPerName.type = "text";

  var InputMoney = document.createElement("input");

  InputPerName.type = "text";

  var InputDate = document.createElement("input");

  InputPerName.type = "text";

  var SeleteOrg = document.createElement("select");

  listData.delRecById = function (id) {

  for (var i = 0; i < listData.length; i++) {

  if (listData[i].id == id) {

  //删除

  /*

  1.将从这个ID所在的位置开始,将后面的每一个元素都往前面移动一位

  2.最后一个元素重复了,要将其清除

  */

  for (var j = i; j < listData.length - 1; j++) {

  listData[j] = listData[j + 1];

  }

  }

  }

  listData.length = listData.length - 1;

  };

  //把文本换成input文本框

  function txtToInput(tdName, inputName) {

  tdName.setAttribute("oldValue", tdName.innerHTML);//先保存原来的内容,如果取消,就恢复

  inputName.value = tdName.innerHTML;

  tdName.appendChild(inputName);

  tdName.removeChild(tdName.firstChild);

  }

  function txtToSelect(tdName, selObj) {

  tdName.appendChild(selObj);

  tdName.removeChild(tdName.firstChild);

  selObj.value = tdName.getAttribute("orgId");

  }

  function selectorText(tdName) {

  var orid = SeleteOrg.value;

  var orgName = listOrgs.getOrgsById(orid).comName;

  // tdName.setAttribute("orgId", SeleteOrg.value);

  tdName.innerHTML = orgName;

  }

  //把input变回文本

  function InputToTxt(tdName, inputName) {

  //如果点击的是取消

  if (isCancelUpdate) {

  tdName.innerHTML = tdName.getAttribute("oldValue");

  return;

  }

  //点击确定修改

  tdName.innerHTML = inputName.value;

  }

  //把select控件变回文本

  function seleToTxt(tdName, selName) {

  // tdName.appendChild(selName);

  var orgId = SeleteOrg.value;

  //删除之前的

  tdName.innerHTML = (listOrgs.getOrgsById(orgId)).comName;

  }

  //取消修改

  function CancelUp(obj) {

  isCancelUpdate = true;//点击的是取消

  doCancel(obj);

  isCancelUpdate = false;

  }

  function  doCancel(obj) {

  var trCur = obj.parentElement.parentElement;

  var tds = trCur.childNodes;

  //全部使用原始的td下面的值(保存在Attribute中)

  tds[1].innerHTML = tds[1].getAttribute("oldValue");

  tds[2].innerHTML = listOrgs.getOrgsById(tds[2].getAttribute("orgId")).comName;

  tds[3].innerHTML = tds[3].getAttribute("oldValue");

  tds[4].innerHTML = tds[4].getAttribute("oldValue");

  tds[5].innerHTML = "<a href='#' onclick='DelObj(this)' >删除</a> <a href='#' onclick='UpObj(this)'>修改</a>";

  // isCancelUpdate = false;

  //确定取消成功后就要置trCur为null

  trCur = null;

  }

  var trCur = null;

  function UpObj(obj) {

  if (trCur != null) {

  //说明有行处于编辑状态,要取消其修改

  isCancelUpdate = true;

  //取消那一行的编辑

  doCancel(trCur.childNodes[5].firstChild);//trCur.childNodes[5].firstChild,就是上一行的<a 修改>

  }

  //得到当前所在的行

  trCur = obj.parentElement.parentElement;

  var tds = trCur.childNodes;

  //捐赠人input修改

  txtToInput(tds[1], InputPerName);

  //金额

  txtToInput(tds[3], InputMoney);

  //受捐日期

  txtToInput(tds[4], InputDate);

  //下拉选择单位

  txtToSelect(tds[2], SeleteOrg);

  //修改链接变成取消

  tds[5].innerHTML = "<a href='#' onclick='doUpObj(this)' >确定</a> <a href='#' onclick='CancelUp(this)'>取消</a>";

  }

  //确定修改

  function doUpObj(obj) {

  isCancelUpdate = false;

  trCur = obj.parentElement.parentElement;

  //1.修改数组中对应的记录

  var rec = { "id": trCur.childNodes[0].innerHTML, "perName": trCur.childNodes[1].childNodes[0].value, "orgId": trCur.childNodes[2].childNodes[0].value, "money": trCur.childNodes[3].childNodes[0].value, "date": trCur.childNodes[4].childNodes[0].value };

  //调用方法来修改ListData中相应的记录

  listData.updateRec(rec);

  //2.修改表格中的记录

  InputToTxt(trCur.childNodes[1], InputPerName);

  seleToTxt(trCur.childNodes[2], SeleteOrg);

  InputToTxt(trCur.childNodes[3], InputMoney);

  InputToTxt(trCur.childNodes[4], InputDate);

  trCur.childNodes[5].innerHTML = "<a href='#' onclick='DelObj(this)' >删除</a> <a href='#' onclick='UpObj(this)'>修改</a>";

  //trCur.childNodes[2].setAttribute("orgId", SeleteOrg.value);

  //确定修改成功后就要置trCur为null

  trCur = null;

  }

  //删除一行数据

  function DelObj(obj) {

  //删除数组中对应的数组

  //1.要得到选中的行

  var curTr = obj.parentElement.parentElement;

  //2.从第一个列中取到id的值

  var delId = curTr.cells[0].innerHTML;

  // window.alert(delId);

  //3.根据id删除一条记录(数组中listData)

  listData.delRecById(delId);

  //4.删除表格视图中的显示行

  curTr.parentElement.removeChild(curTr);

  }

  function gel(id) {

  return document.getElementById(id);

  }

  //1.查询单位名称的绑定,selEle是:selet元素节点

  function LoadOrgList(selEle) {

  for (var i = 0; i < listOrgs.length; i++) {

  var opt = new Option(listOrgs[i].comName, listOrgs[i].id);

  selEle.options.add(opt);

  }

  }

  //2.绑定表格和绑定表格和listData的方法

  function LoadDataList() {

  //for (var i = 0; i < listData.length; i++) {

  //    addRow(listData[i]);

  //}

  //分页显示

  showPage();

  }

  function addRow(obj) {

  var trnew = gel("tbList").insertRow(-1);

  var tdnew = trnew.insertCell(-1);

  tdnew.innerHTML = obj.id;

  trnew.insertCell(-1).innerHTML = obj.perName;

  var trOrgName = trnew.insertCell(-1);

  trOrgName.setAttribute("orgId", obj.orgId);

  trOrgName.innerHTML = (listOrgs.getOrgsById(obj.orgId)).comName;

  trnew.insertCell(-1).innerHTML = obj.money;

  trnew.insertCell(-1).innerHTML = obj.date;

  trnew.insertCell(-1).innerHTML = "<a href='#' onclick='DelObj(this)' >删除</a> <a href='#' onclick='UpObj(this)'>修改</a>";

  }

  window.onload = function() {

  //绑定查询

  LoadOrgList(gel("selSearchOrg"));

  //绑定受捐赠单位

  LoadOrgList(gel("selAddOrg"));

  LoadOrgList(SeleteOrg);

  //绑定表格和listData

  LoadDataList();

  //给新增按钮绑定一个事件

  gel("btnAdd").onclick = function() {

  if ((!(gel("txtName").value)) || (!(gel("txtMoney").value) || (!(gel("txtDate").value)))) {

  alert("输入不能为空");

  return;

  }

  //1.得到输入的内容,打包成一个对象(按照listData的格式)

  var arr = { "perName": gel("txtName").value, "orgId": gel("selAddOrg").value, "money": gel("txtMoney").value, "date": gel("txtDate").value };

  //2.添加到listData数组中

  var res = listData.addRec(arr);

  //3.显示在表格中

  var trnew = gel("tbList").insertRow(-1);

  trnew.insertCell(-1).innerHTML = res.id;

  trnew.insertCell(-1).innerHTML = res.perName;

  var tdOrg = trnew.insertCell(-1);

  tdOrg.setAttribute("orgId", res.orgId);

  tdOrg.innerHTML = listOrgs.getOrgsById(res.orgId).comName;

  trnew.insertCell(-1).innerHTML = res.money;

  trnew.insertCell(-1).innerHTML = res.date;

  trnew.insertCell(-1).innerHTML = "<a href='#' onclick='DelObj(this)' >删除</a> <a href='#' onclick='UpObj(this)'>修改</a>";

  };

  //给查询按钮绑定事件

  gel("btnSearch").onclick = function () {

  if (gel("selSearchOrg").value == -1) {

  return;

  }

  //1.获取要查询的受捐赠单位的orgid

  var orgId = gel("selSearchOrg").value;

  //2.在ListData数组中定义一个根据orgid查询的方法,并在这里调用

  var arrRes = listData.queryByOrId(orgId);

  //3.将旧的表格数据移除显示,一定要从下到上清空显示

  var trs = gel("tbList").rows;

  for (var j = trs.length-1; j>0; j--) {

  gel("tbList").deleteRow(j);

  }

  //4.显示新的数据arrRes

  for (var i = 0; i < arrRes.length; i++) {

  addRow(arrRes[i]);

  }

  };

  //给上一页绑定事件

  gel("btnprePage").onclick = function() {

  if (pageNow > 1) {

  pageNow--;

  showPage();

  } else {

  alert("已经是第一页!")

  }

  };

  //给下一页绑定事件

  gel("btnnextPage").onclick = function () {

  if(pageNow<listData.length/pageSize)

  {

  pageNow++;

  showPage();

  }else

  {

  alert("已经是最后一页!");

  }

  };

  };

  var pageNow = 1;

  var pageSize = 5;

  function showPage() {

  var trs = gel("tbList").rows;

  for (var j = trs.length - 1; j > 0; j--) {

  gel("tbList").deleteRow(j);

  }

  //1.根据pageNow和pageSize返回一个数组

  var res = listData.fenyeQuery(pageNow, pageSize);

  for (var i = 0; i < res.length; i++) {

  addRow(res[i]);

  }

  }

  </script>

  </head>

  <body>

  <div id="container">

  <h1>捐赠管理</h1>

  <div class="search">

  受捐单位

  <select id="selSearchOrg">

  <option value="-1">--请选择--</option>

  </select>

  <input type="button" id="btnSearch" value="查询" class="btn" /> <input type="button" value="上一页" class="btn" id="btnprePage" /> <input type="button" value="下一页" class="btn" id="btnnextPage" /><span id="pageBar"></span>

  </div>

  <div class="search">

  捐赠人:<input type="text" id="txtName" class="inputShort" size="8" />

  受捐单位:

  <select id="selAddOrg">

  </select>

  金额:<input type="text" id="txtMoney" class="inputShort" size="8" />

  受捐日期:<input type="text" id="txtDate" class="inputShort" size="10" />

  <input type="button" id="btnAdd" value="新增" class="btn" />

  </div>

  <table id="tbList" class="tbList" cellspacing="0" cellpadding="0">

  <tr class="th">

  <td>序号</td>

  <td>捐赠人</td>

  <td>受捐单位</td>

  <td>金额</td>

  <td>受捐日期</td>

  <td>操作</td>

  </tr>

  </table>

  </div>

  </body>

  </html>

  css.css如下:

  

复制代码 代码如下:
* {

  margin: 0px;

  padding: 0px;

  }

  body {

  width: 900px;

  margin: 0px auto;

  padding-top: 20px;

  }

  h1 {

  padding: 15px;

  text-align: center;

  }

  #container {

  width: 900px;

  height: auto;

  }

  .header, .search {

  width: 900px;

  height: 30px;

  line-height: 30px;

  border: 1px solid #0094ff;

  margin-top: 3px;

  padding: 0px 5px;

  }

  .tbList {

  width: 912px;

  height: auto;

  }

  .tbList th {

  border: 1px solid #000;

  background: #0094ff;

  height: 30px;

  font-weight: bold;

  line-height: 30px;

  color: #fff;

  }

  .inputShort {

  width: 100px;

  }

  .btn {

  width: 70px;

  height: 25px;

  line-height: 25px;

  font-weight: bold;

  text-align: center;

  }

  td {

  border: 1px solid;

  height: 25px;

  text-indent: 1em;

  border-collapse: collapse;

  }

  希望本文所述对大家的javascript程序设计有所帮助。