javascript动态添加表格数据行,ASP后台数据库保存例子

    在很多web应用中,我们会遇到很多需要动态插入多行纪录的地方。比如,在人才网站上,我们填写简历的时候,我们要填写我们的项目经验,我们可以根据自己的实际情况动态的添加条数,这种不是以单独页面的形式添加,这种动态添加是在同一个页面下动态添加,最后再一起提交到服务器保存到数据库中。

   本文,我将以一个类似的例子来做一个前台用Javascript动态添加数据项,后台保存到数据库的例子。

    浏览器:IE.6.0
    后台:ASP (VBScript )
    前台:HTML + JavaScript

HTML代码:

javascript动态添加表格数据行,ASP后台数据库保存例子<script src="myjs.js"></script>
javascript动态添加表格数据行,ASP后台数据库保存例子
javascript动态添加表格数据行,ASP后台数据库保存例子
<form name=frmUserInfo action="saveInfo.asp" method=post>
javascript动态添加表格数据行,ASP后台数据库保存例子
<table>
javascript动态添加表格数据行,ASP后台数据库保存例子  
<tr>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Name:<input id=txtName name=Name></td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Sex:<input id=txtSex name=Sex></td>
javascript动态添加表格数据行,ASP后台数据库保存例子  
</tr>
javascript动态添加表格数据行,ASP后台数据库保存例子
</table>
javascript动态添加表格数据行,ASP后台数据库保存例子
<br>
javascript动态添加表格数据行,ASP后台数据库保存例子
<table id=tabUserInfo border=1>
javascript动态添加表格数据行,ASP后台数据库保存例子  
<tr>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Project name:</td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Befre description:</td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Begin date:</td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Finished date:</td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td>Delete</td>
javascript动态添加表格数据行,ASP后台数据库保存例子  
</tr>
javascript动态添加表格数据行,ASP后台数据库保存例子  
<tr style="display:none" id=trUserInfo>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td id=tdUserInfo><input id=txtPName name=ProjectName></td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td id=tdUserInfo><input id=txtDesc name=Desc></td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td id=tdUserInfo><input id=txtBDate name=BDate></td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td id=tdUserInfo><input id=txtFDate name=FDate></td>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td id=tdUserInfo><img alt="Delete" onclick="deleteRow(document.all.tabUserInfo,1,this)"></td>
javascript动态添加表格数据行,ASP后台数据库保存例子  
</tr>
javascript动态添加表格数据行,ASP后台数据库保存例子  
<tr>
javascript动态添加表格数据行,ASP后台数据库保存例子      
<td><input type=button value="Add" onclick="addRow(document.all.tabUserInfo,null,1,1)"></td>
javascript动态添加表格数据行,ASP后台数据库保存例子  
</tr>
javascript动态添加表格数据行,ASP后台数据库保存例子
</table>
javascript动态添加表格数据行,ASP后台数据库保存例子
javascript动态添加表格数据行,ASP后台数据库保存例子
<table>
javascript动态添加表格数据行,ASP后台数据库保存例子  
<tr><td><input type=submit value=Submit><input type=reset></td></tr>
javascript动态添加表格数据行,ASP后台数据库保存例子
</table>
javascript动态添加表格数据行,ASP后台数据库保存例子
</form>
javascript动态添加表格数据行,ASP后台数据库保存例子

JS代码:

javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子/**//*This function is use to add one row dynamicly
javascript动态添加表格数据行,ASP后台数据库保存例子*  tabObj : Target table
javascript动态添加表格数据行,ASP后台数据库保存例子*  colNum: The number of columns that of a row in table
javascript动态添加表格数据行,ASP后台数据库保存例子*  sorPos: The source of the new row.
javascript动态添加表格数据行,ASP后台数据库保存例子*  targPos: The position where the new row will be added.
javascript动态添加表格数据行,ASP后台数据库保存例子*
javascript动态添加表格数据行,ASP后台数据库保存例子
*/

javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
function addRow(tabObj,colNum,sorPos,targPos)...{
javascript动态添加表格数据行,ASP后台数据库保存例子    
var nTR = tabObj.insertRow(tabObj.rows.length-targPos);     //  Insert a new row into appointed table on the 
javascript动态添加表格数据行,ASP后台数据库保存例子
                                                                                                                                 //appointed position.
javascript动态添加表格数据行,ASP后台数据库保存例子
    var TRs = tabObj.getElementsByTagName('TR');                          //  Get TRs collection from the appointed table
javascript动态添加表格数据行,ASP后台数据库保存例子
    var sorTR = TRs[sorPos];                                 //  Positioned the sorTR
javascript动态添加表格数据行,ASP后台数据库保存例子
    var TDs = sorTR.getElementsByTagName('TD');                           //  Get TDs collection from the appointed row
javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
    if(colNum==0 || colNum==undefined || colNum==isNaN)...{
javascript动态添加表格数据行,ASP后台数据库保存例子        colNum
=tabObj.rows[0].cells.length;
javascript动态添加表格数据行,ASP后台数据库保存例子    }

javascript动态添加表格数据行,ASP后台数据库保存例子    
javascript动态添加表格数据行,ASP后台数据库保存例子    
var ntd = new Array();                            // Create a new TDs array
javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
    for(var i=0; i< colNum; i++)...{                            // Traverl the TDs in row
javascript动态添加表格数据行,ASP后台数据库保存例子
        ntd[i] = nTR.insertCell();                        // Create new cell
javascript动态添加表格数据行,ASP后台数据库保存例子
        ntd[i].id = TDs[0].id;                                         // copy the TD's id to new cell. | Attention! The TDs's 
javascript动态添加表格数据行,ASP后台数据库保存例子
                                                                                                                          //suffix must be appointed
javascript动态添加表格数据行,ASP后台数据库保存例子
        ntd[i].innerHTML = TDs[i].innerHTML;    // copy the value in ntd[i]'s innerHTML from corresponding TDs    
javascript动态添加表格数据行,ASP后台数据库保存例子
    }

javascript动态添加表格数据行,ASP后台数据库保存例子    
javascript动态添加表格数据行,ASP后台数据库保存例子}

javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
/**//* This function is use to remove appointed row in appointed table
javascript动态添加表格数据行,ASP后台数据库保存例子*   tabObj: the appointed table
javascript动态添加表格数据行,ASP后台数据库保存例子*   targPos: target row position
javascript动态添加表格数据行,ASP后台数据库保存例子*   btnObj: currently clicked delete image button
javascript动态添加表格数据行,ASP后台数据库保存例子*   
javascript动态添加表格数据行,ASP后台数据库保存例子
*/

javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
function deleteRow(tabObj,targPos,btnObj)...{                        //Remove table row
javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子
    for(var i =0; i<tabObj.rows.length;i++)...{
javascript动态添加表格数据行,ASP后台数据库保存例子javascript动态添加表格数据行,ASP后台数据库保存例子        
if(tabObj.getElementsByTagName('img')[i]==btnObj)...{        
javascript动态添加表格数据行,ASP后台数据库保存例子            tabObj.deleteRow(i
+targPos);
javascript动态添加表格数据行,ASP后台数据库保存例子        }

javascript动态添加表格数据行,ASP后台数据库保存例子    }

javascript动态添加表格数据行,ASP后台数据库保存例子}

javascript动态添加表格数据行,ASP后台数据库保存例子

前台代码总结:
    上面的代码有一个要注意的地方,那就是原始行 <tr style="display:none" id=trUserInfo>,我们设置了样式为Display:none,这是因为,下面js中添加行采用的是newTD.innerHTML = sourceTD.innerHTML的方式,即直接把已经存在的列中的内容直接复制到新添加的列的innerHTML属性中,所以隐藏“数据源“列被防止用户删除而出现"Object excepted" 错误。
---------------------------------------------------------------------------


VBScript 代码:

javascript动态添加表格数据行,ASP后台数据库保存例子<%
javascript动态添加表格数据行,ASP后台数据库保存例子     
'###### Begin Transcation #####
javascript动态添加表格数据行,ASP后台数据库保存例子
    conn.beginTrans            ' Start a transaction
javascript动态添加表格数据行,ASP后台数据库保存例子
    sql = "insert into UserInfo(username,sex) values("
javascript动态添加表格数据行,ASP后台数据库保存例子    sql
=sql&"'"& request("Name"&"',"
javascript动态添加表格数据行,ASP后台数据库保存例子    sql
=sql&"'"& request("Sex"&"')"
        Response.Write sql&"<p>"

javascript动态添加表格数据行,ASP后台数据库保存例子    conn.execute(sql)
javascript动态添加表格数据行,ASP后台数据库保存例子
javascript动态添加表格数据行,ASP后台数据库保存例子    
if request("ProjectName").count>0 then
javascript动态添加表格数据行,ASP后台数据库保存例子        
dim maxid
javascript动态添加表格数据行,ASP后台数据库保存例子        maxid 
= 1
javascript动态添加表格数据行,ASP后台数据库保存例子        sql 
= "select max(id) as maxid from UserInfo"
javascript动态添加表格数据行,ASP后台数据库保存例子        
set rs = conn.execute(sql)
javascript动态添加表格数据行,ASP后台数据库保存例子        maxid 
= rs("maxid")
javascript动态添加表格数据行,ASP后台数据库保存例子        rs.close
javascript动态添加表格数据行,ASP后台数据库保存例子        
set rs = nothing
javascript动态添加表格数据行,ASP后台数据库保存例子        
javascript动态添加表格数据行,ASP后台数据库保存例子        
javascript动态添加表格数据行,ASP后台数据库保存例子        
for i =1 to request("ProjectName").count
javascript动态添加表格数据行,ASP后台数据库保存例子            sql 
= "insert into ProjectInfo(uid,pname,pdesc,bdate,fdate) values("
javascript动态添加表格数据行,ASP后台数据库保存例子            sql
=sql&""& maxid &","
javascript动态添加表格数据行,ASP后台数据库保存例子            sql
=sql&"'"& request("ProjectName")(i) &"',"
javascript动态添加表格数据行,ASP后台数据库保存例子            sql
=sql&"'"& request("Desc")(i) &"',"
javascript动态添加表格数据行,ASP后台数据库保存例子            sql
=sql&"'"& request("BDate")(i) &"',"
javascript动态添加表格数据行,ASP后台数据库保存例子            sql
=sql&"'"& request("FDate")(i) &"')"
                Response.Write "    "&sql&"<br>"

javascript动态添加表格数据行,ASP后台数据库保存例子            conn.execute(sql)
javascript动态添加表格数据行,ASP后台数据库保存例子        
next    
javascript动态添加表格数据行,ASP后台数据库保存例子    
end if
javascript动态添加表格数据行,ASP后台数据库保存例子    
javascript动态添加表格数据行,ASP后台数据库保存例子    
if conn.Errors.count > 0 then                                                           ' If occus any error in the transaction , roll back transcation
javascript动态添加表格数据行,ASP后台数据库保存例子
        conn.RollBackTrans
javascript动态添加表格数据行,ASP后台数据库保存例子    
else                 ' If not error, commit the transcation
javascript动态添加表格数据行,ASP后台数据库保存例子
        conn.commitTrans
javascript动态添加表格数据行,ASP后台数据库保存例子    
end if
        conn.close
        set conn = nothing

javascript动态添加表格数据行,ASP后台数据库保存例子
javascript动态添加表格数据行,ASP后台数据库保存例子%
>

后台代码总结:
     获取多数据的方法是调用request("").count,以count的数目来确定要往主表插入的子表纪录次数。 由于数据操作次数不确定,为了防止在执行数据库操作时发生异常,造成数据不一致。我们采用用事务管理。事务管理具有:原子性,一致性,等特点。可以保证数据安全。我们在数据库操作开始的时候调用conn.beginTrans打开一个事务,在数据操作结束时,用conn.Errors.count来判断在事务期间是否有错误发生,如果发生错误或异常就conn.RollBackTrans回滚。否则提交事务,完成数据库操作。

------------------------------------------------------------------------------------
预览:
图一 :进入填写数据页面,点击Add按钮,添加一行,到图二
javascript动态添加表格数据行,ASP后台数据库保存例子

图二:再添加一行并且填写数据到图三
javascript动态添加表格数据行,ASP后台数据库保存例子

图三:在添加了两行数据之后,点击Submit按钮提交数据
javascript动态添加表格数据行,ASP后台数据库保存例子

图四:提交表单后,数据库将会执行如浏览器打印的几条SQL语句,数据便成功添加到数据库。
javascript动态添加表格数据行,ASP后台数据库保存例子

总结:
      这篇文章讲述了如何用Javascript动态地在前台添加用户输入数据的列,并且后台采用ASP技术将前台添加的数据插入数据库。
      希望对学习ASP及Javascript的朋友有所帮助。
      如果您有什么疑问,可以联系我。 如果您对本文有何意见,热烈欢迎批评指正!
      E-Mail: [email protected]
      QQ:580126