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;
        }

js案例-捐赠管理

时间: 2024-08-10 01:21:06

js案例-捐赠管理的相关文章

为什么我要用 Node.js? 案例逐一介绍

介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScript ,从前端跨越到后端,这样巨大的反差让人难以想象,因为仅仅在几年前 Javascript 还如同 Flash 或者 Java applet 那样嵌入网页在沙箱环境中运行. 在深入Node.js之前,你可能需要阅读和了解使用跨栈式JavaScript(JavaScript across the stack)带来的好处,它统

捐赠管理

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"&

JS案例之5——移动端触屏滑动

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取消touch事件的时候触发,这个

JS案例之3——倒计时

利用简单的数字累加循环模拟倒计时的效果,逻辑比较简单.如果大牛们有更好的办法欢迎补充. 这种效果经常用于在规定的时间做某件事.比如在1分钟之后重新发送验证码等. 案例演示: 源代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <titl

JS案例之1——pager 分页

原文:JS案例之1--pager 分页 学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路. 此处代码写的是静态分页.如果需动态分页,还可以修改下.第一次写,还有很多地方可以优化.希望各位大牛踊跃拍砖. 预览图 源代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; char

bower解决js的依赖管理备记

一个新的web项目开始,我们总是很自然地去下载需要用到的js类库文件,比如jQuery,去官网下载名为jquery-1.10.2.min.js文件,放到我们的项目里.当项目又需要bootstrap的时候,我们会重复刚才的工作,去bootstrap官网下载对应的类库.如果bootstrap所依赖的jQuery并不是1.10.2,而是2.0.3时,我们会再重新下载一个对应版本的jQuery替换原来的. 包管理是个复杂的问题,我们要知道谁依赖谁,还要明确哪个版本依赖哪个版本.这些对于开发人员来说,负担

(Mirage系列之七)Mirage经典案例之管理和发布应用层

在(Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析中我们介绍过,Mirage从逻辑上把终端桌面分层了三层:系统层(包括驱动和基础层),应用层,以及用户数据层.在(Mirage系列之五)Mirage经典案例之桌面驱动和基础层管理中我们讲到Mirage可以灵活方便的管理终端的驱动并且发布基础层.本文将介绍Mirage如何管理终端的应用层. 一个公司往往有很多部门,各部门所需要的工作软件也不尽相同.Mirage通过分层这个核心技术,将应用层剥离出来,使得管

JS案例之4——Ajax多图上传

近期项目中有好几次用到多图上传,第一次在项目中真正用到Ajax技术,稍微整理了下,贴个案例出来. 我们传统的做法是当用户提交一个表单时,就向web服务器端发送一个请求.服务器接受并处理传来的表单信息,处理完成后返回一个新的页面.这个做法比较浪费带宽,当请求数较多时,页面响应的时间就依赖于服务器处理的时间. 而Ajax应用仅向服务器发送并取回必需的数据,其他不需要的数据不用响应,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JS来处理来自服务器的响应.因此在服务器和

Node.js的安装以及Node.js的模块管理

索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Element)的使用 一:Node.js正确写法 在很久以前,写过一篇 jQuery插件定义 的博客,给我留下了深刻的印象.当时本意是讨论jQuery插件的标准化定义,引出了jQuery写法的问题. jQuery写法是千变万化:Jquery,jquery,JQUERY,JQuery.好些人都没留意这个写法的