<script language="javascript">
function alterRow(rowsCount,cellsCount,postRowsCount)//增加或删除行
{//rowsCount:table行数,cellsCount:table列数,postRowsCount:要增加行的位置后面已有的行数
with(window.event)
{
var e=srcElement //e=input
var r=e.parentElement.parentElement //r=tr
var t=r.parentElement.parentElement //t=table
//alert(r.parentElement.tagName)
if(keyCode==68 && ctrlKey && t.rows.length>rowsCount)
{
t.deleteRow(r.rowIndex);//删除行
document.focus();
return false;
}
if(keyCode!=13||e.parentElement.cellIndex!=cellsCount-1)
return true;//e.parentElement=td
//if(t.rows.length>r.rowIndex+1)return true;
var n=t.insertRow(t.rows.length-postRowsCount);
for(i=0;i<r.cells.length;i++)
{
var c=n.insertCell();
c.innerHTML=r.cells(i).innerHTML;
c.children[0].value="";
}
}
}
</script>
<body bgcolor="#FFFFFF" text="#000000" onkeydown="if(event.keyCode==13 && event.srcElement.tagName!='TEXTAREA') {event.keyCode=9;}">
<table width="100%" border="1">
  <tr> 
    <td><div align="center">科研工作项目</div></td>
    <td><div align="center">预期目标</div></td>
    <td><div align="center">进度</div></td>
    <td><div align="center">工作者</div></td>
  </tr>
  <tr> 
    <td><INPUT name=ItemSub size=10 onkeydown="alterRow(2,4,0)"></td>
    <td><INPUT name=ItemObject size=10 onkeydown="alterRow(2,4,0)"></td>
    <td><INPUT name=ItemSche size=10 onkeydown="alterRow(2,4,0)"></td>
    <td><INPUT name=Workman size=10 onkeydown="alterRow(2,4,0)"></td>
  </tr>
</table>
说明:如需增加一行,请在最后一项输入完毕后敲回车即可;如果要删除一行,请先将光标移至该行的某一输入框中,然后再按Crtl+D即可。
</body>

解决方案 »

  1.   

    13行中的document.focus();是多余的,也是错误的,删除它即可
      

  2.   

    <script>
    function deleteLine()
    {
    for (var i=tbody1.children.length-1; i>=0 ; i-- )
    if (tbody1.children[i].firstChild.firstChild.checked)
    tbody1.deleteRow(i);
    }
    function addLine()
    {
    elm = thead1.lastChild.cloneNode(true)
    elm.style.display="block";
    tbody1.insertBefore(elm);
    }
    </script>
    <table width="100%" border="1">
    <thead id=thead1>
      <tr> 
        <td><div align="center">选中</div></td>
        <td><div align="center">科研工作项目</div></td>
        <td><div align="center">预期目标</div></td>
        <td><div align="center">进度</div></td>
        <td><div align="center">工作者</div></td>
      </tr>
      <tr style="display:none"> 
        <td><input type=checkbox id=checkLine></td>
        <td><INPUT name=ItemSub size=10></td>
        <td><INPUT name=ItemObject size=10></td>
        <td><INPUT name=ItemSche size=10></td>
        <td><INPUT name=Workman size=10></td>
      </tr>
    </thead>
    <tbody id=tbody1>
      <tr> 
        <td><input type=checkbox id=checkLine></td>
        <td><INPUT name=ItemSub size=10></td>
        <td><INPUT name=ItemObject size=10></td>
        <td><INPUT name=ItemSche size=10></td>
        <td><INPUT name=Workman size=10></td>
      </tr>
    </tbody>
    </table>
    <input type=button onclick="deleteLine()" value=删除>
    <input type=button onclick="addLine()" value=添加>
      

  3.   

    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <title>明细ID</title>
    </head><body>
    <form name="frm" method=post ><div width=100% id=thedetailtableDIV>
    <table align="center" bordercolor=cccccc border=1 onkeydown='keyDownControl(event.srcElement)' >
    <tr><td colspan=100 align=right>
          <input type="button"  value="增加" class="bottom" onclick="addDetailProcess();">
          <input type="button"  value="拆分" class="bottom" onclick="copyDetailProcess();">
          <input type="button"  value="删除" class="bottom" onclick="delDetailProcess();">
          <input type="button"  value="批改" class="bottom" onclick="modifyDetailProcess();">
          <input type="button"  value="批选" class="bottom" onclick="selectDetailProcess(document.all('pixianTrueOrFalse').checked);"><input type="checkbox" name="pixianTrueOrFalse" checked> 
          <input type="button"  value="完成" class="bottom" onclick="document.frm.submit();">
          &nbsp;
    </td>
    </tr>
    <tbody id="tbDetailPrepare">
    <tr>
    <td ><input type="checkbox" name="record_select" ></td>
    <td ><input type="text" name="detail_id" value='' ></td>
    <td ><input type="text" name="detail_name" value='' ></td>
    </tr>
    </tbody>
      <tr bgcolor=eeeeee id="trDetailTitles"> 
        <td ><input type=checkbox onclick="selectallcheckbox(this)"></td>
        <td >明细ID<input type=checkbox name="colbox_detail_id"></td>
        <td >明细NAME<input type=checkbox name="colbox_detail_name"></td>
      </tr>
      <tbody id="tbDetailUsed" >
    <tr>
    <td ><input type="checkbox" name="record_select" ></td>
    <td ><input type="text" name="detail_id" value='' ></td>
    <td ><input type="text" name="detail_name" value='' ></td>
    </tr> <tr height=0 ><td colspan=100 height=0 > 合计</td></tr>
      </tbody> </table>
    </div></form><input name="theHistoryRecord" type=hidden >
    </body></html><script language=javascript> window.onload = historyOnemore;
    window.onbeforeunload = fixHistory; function fixHistory() //记住历史
    {
    document.all("theHistoryRecord").value=document.all("thedetailtableDIV").innerHTML.replace(/\n/g,"");
    } function historyOnemore() //恢复历史
    {
    if (document.all("theHistoryRecord").value!="")
    {document.all("thedetailtableDIV").innerHTML=document.all("theHistoryRecord").value;
    }
    } function selectallcheckbox(obj) //全选或全不选
    {
    var tureorfalse=obj.checked;
    var theDetail=tbDetailUsed.rows;
    for(var i=0;i<theDetail.length-1;i++)
    {
    theDetail[i].all("record_select").checked=tureorfalse;
    }
    }


    function addDetailProcess(afterRowIndex) //增加明细
    {
    var alltbDetailUsed= document.all("tbDetailUsed").rows;
    var theFirstSelectedDetail;
    if (afterRowIndex==null)
    {
    for(var i=0;i<alltbDetailUsed.length-1;i++)
    {
    if (alltbDetailUsed[i].all("record_select").checked==true) {theFirstSelectedDetail=i;break;}
    }
    if (theFirstSelectedDetail==null) {theFirstSelectedDetail=alltbDetailUsed.length-2;}
    }
    else theFirstSelectedDetail=afterRowIndex;
    var newRow = document.all("tbDetailPrepare").rows[0].cloneNode(true);
    var desRow = alltbDetailUsed[theFirstSelectedDetail+1];
    desRow.parentElement.insertBefore(newRow,desRow ); }

    function copyDetailProcess() //拆分明细
    {
    var alltbDetailUsed= document.all("tbDetailUsed").rows;
    var theFirstSelectedDetail;
    for(var i=0;i<alltbDetailUsed.length-1;i++)
    {
    if (alltbDetailUsed[i].all("record_select").checked==true) {theFirstSelectedDetail=i;break;}
    }
    if (theFirstSelectedDetail==null) {alert("拆分操作之前请先选择一笔明细!");return false;}
    var newRow = alltbDetailUsed[theFirstSelectedDetail].cloneNode(true);
    var desRow = alltbDetailUsed[theFirstSelectedDetail+1];
    desRow.parentElement.insertBefore(newRow,desRow ); }
    function delDetailProcess() //删除明细
    {
    var alltbDetailUsed= document.all("tbDetailUsed").rows;
    if (confirm("确定选择正确并且要将这些明细删除")==false) return false;
    for(var i=0;i<alltbDetailUsed.length-1;i++)
    {
    if (alltbDetailUsed[i].all("record_select").checked==true)
    {
    document.all("tbDetailUsed").deleteRow(i);
    i=i-1;
    }
    }
    } function modifyDetailProcess()
    {
    var i=0;
    var j=0;
    var theSelectedColName=new Array();
    var theSelectedColValue=new Array();
    var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");
    var theDetailPrepareTr=document.all("tbDetailPrepare").rows[0];
    var the
    for (j=1;j<theColboxs.length;j++)
    {
    if ((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)
    {
    theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);
    theSelectedColValue[theSelectedColValue.length]=theDetailPrepareTr.all(theColboxs[j].name.substr(7,100)).value;
    }

    }

    if (theSelectedColName.length==0) {alert("您没有选择需要修改的列!");return false;}
    if (!confirm("真的要批量修改?")) return false;

    var alltbDetailUsed= document.all("tbDetailUsed").rows;
    for(var i=0;i<alltbDetailUsed.length-1;i++)
    {
    if (alltbDetailUsed[i].all("record_select").checked)
    {
    for (j=0;j<theSelectedColName.length;j++)
    {
    alltbDetailUsed[i].all(theSelectedColName[j]).focus();
    alltbDetailUsed[i].all(theSelectedColName[j]).value=theSelectedColValue[j];
    alltbDetailUsed[i].all(theSelectedColName[j]).select();
    }

    }
    }





    }

    function selectDetailProcess(trueOrFalse) //按条件批量选中
    {
    if (trueOrFalse!=false) trueOrFalse=true;
    var i=0;
    var j=0;
    var theSelectedColName=new Array();
    var theSelectedColValue=new Array();
    var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");
    var theDetailPrepareTr=document.all("tbDetailPrepare").rows[0];
    var the
    for (j=1;j<theColboxs.length;j++)
    {
    if ((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)
    {
    theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);
    theSelectedColValue[theSelectedColValue.length]=theDetailPrepareTr.all(theColboxs[j].name.substr(7,100)).value;
    }

    }
    var alltbDetailUsed= document.all("tbDetailUsed").rows;
    for(var i=0;i<alltbDetailUsed.length-1;i++)
    {
    var theTrWillBeSelected=true;
    for (j=0;j<theSelectedColName.length;j++)
    {
    if (alltbDetailUsed[i].all(theSelectedColName[j]).value!=theSelectedColValue[j])
    {
    theTrWillBeSelected=false;break;
    }
    }
    if (theTrWillBeSelected) alltbDetailUsed[i].all("record_select").checked=trueOrFalse;
    }
    }

    function keyDownControl(obj) //用于控制明细里的上下键。只控制input
    {
    if(obj.tagName!="INPUT"||obj.name=="") return true;
    k=event.keyCode;
    if(!(k==38||k==40)) return true;
    var theSamenameInputs=document.all(obj.name);
    var i=0;
    if (theSamenameInputs.length>1)
    {
    for (i=0;i<theSamenameInputs.length;i++)
    { if (theSamenameInputs[i]==obj) break; }
    }
    if((i==theSamenameInputs.length-1)&&(k==40))
    {
    addDetailProcess(theSamenameInputs.length-2);
    }
    if((i>0)&&(k==38))
    {
    theSamenameInputs[i-1].select(); 
    theSamenameInputs[i-1].focus();
    event.returnValue=false;
    return false;
    }
    if((i<theSamenameInputs.length-1)&&(k==40))
    {
    theSamenameInputs[i+1].select(); 
    theSamenameInputs[i+1].focus();
    event.returnValue=false; 
    return true;
    }
    }

    </script>
      

  4.   

    删除
    <table width="100%" border="1" id=otable>
      <tr> 
        <td><div align="center">科研工作项目</div></td>
        <td><div align="center">预期目标</div></td>
        <td><div align="center">进度</div></td>
        <td><div align="center">工作者</div></td>
    <td></td>
      </tr>
      <tr> 
        <td><INPUT name=ItemSub size=10></td>
        <td><INPUT name=ItemObject size=10></td>
        <td><INPUT name=ItemSche size=10></td>
        <td><INPUT name=Workman size=10></td>
      </tr>
      <input type=button name=b1 value=del onclick=del()>
    </table>
    <script language=javascript>
    <!--
    function del()
    {
       otable.deleteRow(1);   
             
          
    }
    -->
    </script>
      

  5.   

    <table width="100%" border="1" id=otable>
      <tr> 
        <td><div align="center">科研工作项目</div></td>
        <td><div align="center">预期目标</div></td>
        <td><div align="center">进度</div></td>
        <td><div align="center">工作者</div></td>
    <td></td>
      </tr>
      <tr> 
        <td><INPUT name=ItemSub size=10></td>
        <td><INPUT name=ItemObject size=10></td>
        <td><INPUT name=ItemSche size=10></td>
        <td><INPUT name=Workman size=10></td>
      </tr>
    </table>
    <input type=button name=b1 value=del onclick=del()>
    <input type=button name=b1 value=add onclick=add()><script language=javascript>
    <!--
    function del()
    {
       otable.deleteRow(1);   
      
    }function add()
    { var madd=otable.rows.length;
      var orow1=otable.insertRow(otable.rows.length);
      //insert one row.
      var arows=otable.rows;
      //retrieve the rows collection for the table
      var acells=orow1.cells; 
      //retrieve the cells collection for the new row
      var ocell1_1=arows(orow1.rowIndex).insertCell(acells.length);
      var ocell1_2=arows(orow1.rowIndex).insertCell(acells.length);
      var ocell1_3=arows(orow1.rowIndex).insertCell(acells.length);
      var ocell1_4=arows(orow1.rowIndex).insertCell(acells.length);
      ocell1_1.innerHTML="<INPUT name=ItemSub size=10>";
      ocell1_2.innerHTML="<INPUT name=Itemobject size=10>";
      ocell1_3.innerHTML="<INPUT name=ItemShce size=10>";
      ocell1_4.innerHTML="<INPUT name=workman size=10>";
    }-->
    </script>
    已调试通过