• 技术文章 >web前端 >js教程

    用Js实现的动态增加表格示例自己写的_javascript技巧

    2016-05-16 17:19:26原创446
    复制代码 代码如下:

    function addEvent (o,c,h){
    if(o.attachEvent){
    o.attachEvent('on'+c,h);
    }else{
    o.addEventListener(c,h,false);
    }
    return true;}
    var selectRow;//页面级js变量,用来存被选中的行,好在弹出窗口中对该行赋值
    function addnode()
    {
    var table=document.getElementById("Dy_table");
    var tr=table.insertRow();
    var cell0=tr.insertCell();
    var cell1=tr.insertCell();
    var cell2=tr.insertCell();
    var cell3=tr.insertCell();
    var cell4=tr.insertCell();
    var cell5=tr.insertCell();
    var cell6=tr.insertCell();
    var cell7=tr.insertCell();
    var cell8=tr.insertCell();
    var cell9=tr.insertCell();
    var hidden1=document.createElement("");
    var hidden2=document.createElement("");
    var hidden3=document.createElement("");
    var hidden4=document.createElement("");//行状态
    var hidden5=document.createElement("");//隐藏单价
    var input1=document.createElement("");
    var input2=document.createElement("");
    var input3=document.createElement("");
    var input4=document.createElement("");
    var input5=document.createElement("");
    var input6=document.createElement("");
    var input8=document.createElement("");
    var input9=document.createElement("")
    var oOption1=document.createElement("option");
    var oOption2=document.createElement("option");
    var oOption3=document.createElement("option");
    var oOption4=document.createElement("option");
    input6.options.add(oOption1);
    input6.options.add(oOption2);
    input6.options.add(oOption3);
    input6.options.add(oOption4);
    oOption1.innerText="合同件";
    oOption1.value="合同件";
    oOption2.innerText="外购件";
    oOption2.value="外购件";
    oOption3.innerText="备件部";
    oOption3.value="备件部";
    oOption4.innerText="厂家供件";
    oOption4.value="厂家供件";
    var rowIndex;
    rowIndex = table.rows.length-2;
    var rowCount = table.rows[0].cells[0].getElementsByTagName("input")[2].value;//用户可见的行数
    cell0.innerText=parseInt(rowCount)+1;
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount)+1;
    hidden2.value = parseInt(table.rows[0].cells[0].getElementsByTagName("input")[1].value) + 1;
    table.rows[0].cells[0].getElementsByTagName("input")[1].value=hidden2.value;
    cell1.appendChild(input1);
    cell1.appendChild(hidden1);//产品代码
    cell1.appendChild(hidden2);//内部顺序
    cell1.appendChild(hidden3);//该行的Id,用来修改和删除
    cell1.appendChild(hidden4);//该行的状态
    cell2.appendChild(input2);
    cell3.appendChild(input3);
    cell4.appendChild(input4);
    cell4.appendChild(hidden5);
    cell5.appendChild(input5);
    cell6.appendChild(input6);
    cell9.appendChild(input9);
    cell8.appendChild(input8);
    cell7.appendChild(input7);
    var tt=function(obj)
    {
    return function(){textChange(obj);}
    }
    var ttt=function(obj)
    {
    return function(){selectChange(obj);}
    }
    addEvent(input1,"change",tt(input1));
    addEvent(input2,"change",tt(input1));
    addEvent(input3,"change",tt(input1));
    addEvent(input4,"change",tt(input1));
    addEvent(input5,"change",tt(input1));
    addEvent(input6,"change",ttt(input6));
    addEvent(input7,"change",tt(input1));
    // addEvent(input8,"change",tt(input1));
    }
    function delnode()//删除时的事件
    {
    var table=document.getElementById("Dy_table");
    var rowCount = table.rows[0].cells[0].getElementsByTagName("input")[2].value;//用户可见的行数
    var row;//保存最后一个可见的row
    for( var i=table.rows.length-1; i>=0 ;i--)
    {
    if(table.rows[i].style.display!="none")
    {
    row=table.rows[i];
    break;
    }
    }
    var rowId=row.cells[1].getElementsByTagName("input")[3].value;
    if( rowCount > 1 )
    {
    if(rowId=="")//新增的行未写入数据库时,直接删除
    {
    row.removeNode(true);
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount) - 1;
    }
    else//需要从数据库删除的,置上删除标记
    {
    row.style.display="none";
    row.cells[1].getElementsByTagName("input")[4].value = "2";
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount-1);
    }
    }
    else
    {
    if(rowId == "")//新增的行未写入数据库时,清空
    {
    row.cells.item(1).getElementsByTagName("input")[0].value="";
    row.cells.item(1).getElementsByTagName("input")[1].value="";
    row.cells.item(2).getElementsByTagName("input")[0].value="";
    row.cells.item(3).getElementsByTagName("input")[0].value="1";
    row.cells.item(4).getElementsByTagName("input")[0].value="";
    row.cells.item(7).getElementsByTagName("input")[0].value="";
    row.cells.item(5).getElementsByTagName("input")[0].value="";
    row.cells.item(6).getElementsByTagName("select")[0].selectedIndex=0;
    }
    else//需要从数据库删除的,置上删除标记
    {
    row.style.display="none";
    row.cells[1].getElementsByTagName("input")[4].value = "2";
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount) - 1;
    addnode();
    }
    }
    setClf();
    }
    function delnode1(o)//删除时的事件
    {
    var tr=o.parentElement.parentElement;
    var table=document.getElementById("Dy_table");
    var rowCount = table.rows[0].cells[0].getElementsByTagName("input")[2].value;//用户可见的行数
    var rowId=tr.cells[1].getElementsByTagName("input")[3].value;
    if( rowCount > 1 )
    {
    if(rowId=="")//新增的行未写入数据库时,直接删除
    {
    tr.removeNode(true);
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount) - 1;
    }
    else
    {
    tr.style.display="none";
    tr.cells[1].getElementsByTagName("input")[4].value = "2";
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount-1);
    }
    }
    else
    {
    if(rowId=="")//新增的行未写入数据库时,直接清空
    {
    tr.cells.item(1).getElementsByTagName("input")[0].value="";
    tr.cells.item(1).getElementsByTagName("input")[1].value="";
    tr.cells.item(2).getElementsByTagName("input")[0].value="";
    tr.cells.item(3).getElementsByTagName("input")[0].value="1";
    tr.cells.item(4).getElementsByTagName("input")[0].value="";
    tr.cells.item(7).getElementsByTagName("input")[0].value="";
    tr.cells.item(5).getElementsByTagName("input")[0].value="";
    tr.cells.item(6).getElementsByTagName("select")[0].selectedIndex=0;
    }
    else//需要从数据库删除的,置上删除标记
    {
    tr.style.display="none";
    tr.cells[1].getElementsByTagName("input")[4].value = "2";
    table.rows[0].cells[0].getElementsByTagName("input")[2].value = parseInt(rowCount) - 1;
    addnode();
    }
    }
    //以下循环用于从中间删除时更新表格行号
    rowCount = table.rows[0].cells[0].getElementsByTagName("input")[2].value;
    for( var i= 1,p = 1; i < table.rows.length ;i++)
    {
    if(table.rows[i].style.display!="none")
    {
    table.rows[i].cells[0].innerText = p;
    p++;
    }
    }
    setClf();
    }
    //修改时发生的事件
    function textChange(o)
    {
    setClf();
    var tr=o.parentElement.parentElement;
    var rowState = tr.cells[1].getElementsByTagName("input")[4].value;
    if( rowState == "1")
    return;
    else
    tr.cells[1].getElementsByTagName("input")[4].value = "3";
    }
    //下拉框选项改变setClf()是计算金额的,这里面没有给出来
    function selectChange(o)
    {
    var tr=o.parentElement.parentElement;
    var glf = tr.cells[7].getElementsByTagName("input")[0];
    var dj = tr.cells[4].getElementsByTagName("input")[0];
    var dj1 = tr.cells[4].getElementsByTagName("input")[1];
    if( o.selectedIndex==0)//合同件
    {
    glf.value='0.00';
    dj.value=dj1.value;
    setClf();
    return;
    }
    if( o.selectedIndex==1)//外购件
    {
    glf.value='0.20';
    dj.value=dj1.value;
    setClf();
    return;
    }
    if( o.selectedIndex==2)//备件部
    {
    glf.value='0.00';
    dj.value=dj1.value;
    setClf();
    return;
    }
    if( o.selectedIndex==3)//厂家供件
    {
    glf.value='0.00';
    dj.value='0.00';
    dj.readOnly=true;
    setClf();
    return;
    }
    }
    //提交前验证数据,保证没有重复的行
    function checkSameData()
    {
    var table=document.getElementById("Dy_table");
    // var rowCount = table.rows[0].cells[0].getElementsByTagName("input")[2].value;//用户可见的行数
    for( var i= 1; i < table.rows.length ;i++)
    {
    if(table.rows[i].style.display == "none"||table.rows[i].cells[1].getElementsByTagName("input")[1].value=="") continue;
    for( var p= i + 1; p < table.rows.length ;p++)
    {
    if(table.rows[p].style.display == "none") continue;
    if(table.rows[i].cells[1].getElementsByTagName("input")[1].value.replace(/\s+$/g,"") ==
    table.rows[p].cells[1].getElementsByTagName("input")[1].value.replace(/\s+$/g,""))
    {alert("零件部分存在重复的项,不能保存!");return false;}
    }
    }
    return true;
    }
    //零件窗口是否打开
    var dialogWin;
    function selectLj(o)//选零件
    {
    if(dialogWin == null)
    {
    selectRow = o.parentElement.parentElement;//将行赋值给全局变量
    dialogWin = window.showModelessDialog("../jddgl/Select_lj.aspx",window,
    "center:yes;dialogWidth:550px;dialogHeight:400px;help:no;status:no;");
    }
    }

    =======
    前台页面
    复制代码 代码如下:























    序号 <%--页面状态--%>
    <%--总行数,包括隐藏的--%>
    <%--用户可见行数--%>
    零件号 零件名称 数量 单价 生产厂家 材料来源 管理费 合计 操作
    1






    项目需要这种功能,前前后后用了几种办法,我觉得还是这种比较好(毕竟是我花了蛮多时间写的,呵呵),js不怎么熟练,希望有朋友能指点帮助改进和提高。失败的作品,不兼容FF,衰!
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:动态增加 表格
    上一篇:将input file的选择的文件清空的两种解决方案_javascript技巧 下一篇:可以用鼠标拖动的DIV实现思路及代码_javascript技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 四种方法搞定JavaScript创建多个对象• Angular的:host、:host-context、::ng-deep选择器• 什么是异步资源?浅析Node实现异步资源上下文共享的方法• 什么是变更检测?聊聊angular的变更机制• 一文掌握JavaScript数字类型
    1/1

    PHP中文网