架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

js在ie与fx下增删表格行

Posted on 2008-10-25 17:52  chen eric  阅读(302)  评论(0编辑  收藏  举报

 

  1 2008年03月04日 星期二 15:14
  2 效果图如下: 
  3 
  4 
  5   点“添加参与人”按钮可以添加一行,每行后面都有一个删除按钮,可以删除所在行,“清空”则删除所有的行。
  6   这种效果在需要批量添加数据的时候非常有用,可以在客户端添加完一批数据,然后通过AJAX一次提交给服务器处理,下面是完整代码:
  7 
  8 Body部份:
  9    <div>
 10    <table width="613" border="0" cellpadding="2" cellspacing="1" id="SignFrame">
 11               <tr id="trHeader">
 12                 <td width="27" bgcolor="#96E0E2">序号</td>
 13                 <td width="64" bgcolor="#96E0E2">用户姓名</td>
 14                 <td width="98" bgcolor="#96E0E2">电子邮箱</td>
 15                 <td width="92" bgcolor="#96E0E2">固定电话</td>
 16                 <td width="86" bgcolor="#96E0E2">移动手机</td>
 17                 <td width="153" bgcolor="#96E0E2">公司名称</td>
 18                 <td width="57" align="center" bgcolor="#96E0E2">&nbsp;</td>
 19               </tr>
 20         </table>
 21    </div>
 22    <div>
 23         <input type="button" name="Submit" value="添加参与人" onclick="AddSignRow()" /
 24      <input type="button" name="Submit2" value="清空" onclick="ClearAllSign()" />
 25      <input name='txtTRLastIndex' type='hidden' id='txtTRLastIndex' value="1" />
 26    </div>
 27 
 28 JS代码部份
 29 <script language="javascript">
 30 // Example: obj = findObj("image1");
 31 function findObj(theObj, theDoc)
 32 {
 33 var p, i, foundObj;
 34 if(!theDoc) theDoc = document;
 35 if( (p = theObj.indexOf("?")) > 0 && parent.frames.length)
 36 {
 37     theDoc = parent.frames[theObj.substring(p+1)].document;
 38     theObj = theObj.substring(0,p);
 39 }
 40 if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];
 41 for (i=0!foundObj && i < theDoc.forms.length; i++
 42     foundObj = theDoc.forms[i][theObj];
 43 for(i=0!foundObj && theDoc.layers && i < theDoc.layers.length; i++
 44     foundObj = findObj(theObj,theDoc.layers[i].document);
 45 if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);
 46 return foundObj;
 47 }
 48 
 49 //添加一个参与人填写行
 50 function AddSignRow(){
 51 //读取最后一行的行号,存放在txtTRLastIndex文本框中 
 52 var txtTRLastIndex = findObj("txtTRLastIndex",document);
 53 var rowID = parseInt(txtTRLastIndex.value);
 54 
 55 var signFrame = findObj("SignFrame",document);
 56 //添加行
 57 var newTR = signFrame.insertRow(signFrame.rows.length);
 58 newTR.id = "SignItem" + rowID;
 59 
 60 //添加列:序号
 61 var newNameTD=newTR.insertCell(0);
 62 //添加列内容
 63 newNameTD.innerHTML = newTR.rowIndex.toString();
 64 
 65 //添加列:姓名
 66 var newNameTD=newTR.insertCell(1);
 67 //添加列内容
 68 newNameTD.innerHTML = "<input name='txtName" + rowID + "' id='txtName" + rowID + "' type='text' size='12' />";
 69 
 70 //添加列:电子邮箱
 71 var newEmailTD=newTR.insertCell(2);
 72 //添加列内容
 73 newEmailTD.innerHTML = "<input name='txtEMail" + rowID + "' id='txtEmail" + rowID + "' type='text' size='20' />";
 74 
 75 //添加列:电话
 76 var newTelTD=newTR.insertCell(3);
 77 //添加列内容
 78 newTelTD.innerHTML = "<input name='txtTel" + rowID + "' id='txtTel" + rowID + "' type='text' size='10' />";
 79 
 80 //添加列:手机
 81 var newMobileTD=newTR.insertCell(4);
 82 //添加列内容
 83 newMobileTD.innerHTML = "<input name='txtMobile" + rowID + "' id='txtMobile" + rowID + "' type='text' size='12' />";
 84 
 85 //添加列:公司名
 86 var newCompanyTD=newTR.insertCell(5);
 87 //添加列内容
 88 newCompanyTD.innerHTML = "<input name='txtCompany" + rowID + "' id='txtCompany" + rowID + "' type='text' size='20' />";
 89 
 90 
 91 //添加列:删除按钮
 92 var newDeleteTD=newTR.insertCell(6);
 93 //添加列内容
 94 newDeleteTD.innerHTML = "<div align='center' style='width:40px'><a href='javascript:;' onclick=\"DeleteSignRow('SignItem" + rowID + "')\">删除</a></div>";
 95 
 96 //将行号推进下一行
 97 txtTRLastIndex.value = (rowID + 1).toString() ;
 98 }
 99 
100 //删除指定行
101 function DeleteSignRow(rowid){
102 var signFrame = findObj("SignFrame",document);
103 var signItem = findObj(rowid,document);
104 
105 //获取将要删除的行的Index
106 var rowIndex = signItem.rowIndex;
107 
108 //删除指定Index的行
109 signFrame.deleteRow(rowIndex);
110 
111 //重新排列序号,如果没有序号,这一步省略
112 for(i=rowIndex;i<signFrame.rows.length;i++){
113    signFrame.rows[i].cells[0].innerHTML = i.toString();
114 }
115 }
116 //清空列表
117 function ClearAllSign(){
118 if(confirm('确定要清空所有参与人吗?')){
119    var signFrame = findObj("SignFrame",document);
120    var rowscount = signFrame.rows.length;
121   
122    //循环删除行,从最后一行往前删除
123    for(i=rowscount - 1;i > 0; i--){
124     signFrame.deleteRow(i);
125    }
126   
127    //重置最后行号为1
128    var txtTRLastIndex = findObj("txtTRLastIndex",document);
129    txtTRLastIndex.value = "1";
130   
131    //预添加一行
132    AddSignRow();
133 }
134 }
135 
136 </script> 
137