本文實例介紹了JS實現動態生成表格並向後端提交表格數據的相關代碼,分享給大家供大家參考,具體內容如下
先來看一下需求:在web頁面上動態的生成表格,並可以對表格中的數據進行編輯,然後把表格中的數據提交至後端服務器保存。
那麼我們首先需要解決的是動態生成表格的問題
1.首先我們需要導入JS庫文件。
<script src="../js/jqui/jquery/jquery-1.5.2.min.js" type="text/javascript"></script>
2.然後在頁面div中事先創建一個空白表格,可以根據需求而定,我這裡是一個帶表頭的表格
<table border="0" style="text-align: center;" width="100%" id="myTable"> <tr> <td width="150px;">表頭1</td> <td width="150px;">表頭2</td> <td width="150px;">表頭3</td> <td width="150px;">表頭4</td> <td width="150px;">表頭5</td> <td width="150px;">操作</td> </tr> </table>
3.表格創建好後,我們就可以寫動態生成表格的關鍵代碼了。我們寫一個js方法供觸發使用
var num = 0;
function addTable(){
var tableHtml ="";
tableHtml += '<tr id="tr'+num+'">'
+'<td><input class="addtd" id="cnashu1'+num+'" style="width:150px;" type="text" name="cnashu1" /></td>'
+'<td><input class="addtd" id="cnashu2'+num+'" style="width:150px;" type="text" name="cnashu2"/></td>'
+'<td><input class="addtd" id="cnashu3'+num+'" style="width:150px;" type="text" name="cnashu3"/></td>'
+'<td><input class="addtd" id="cnashu4'+num+'" style="width:150px;" type="text" name="cnashu4"/></td>'
+'<td><input class="addtd" id="cnashu5'+num+'" style="width:150px;" type="text" name="cnashu5"/></td>'
+'<td><a style="cursor: pointer; color: blue;" onclick="removeTr('+num+')">刪除</a>'
+'<a id="edit'+num+'" class="edit" style="cursor: pointer; color: blue;" onclick="editDataByOne('+num+')">修改</a>'
+'<a id="save'+num+'" class="hide" style="cursor: pointer; color: blue;" onclick="saveByOne('+num+')">保存</a>'
+'</td>'
+'</tr>';
var elements = $("#myTable").children().length; //表示id為“mtTable”的標簽下的子標簽的個數
$("#myTable").children().eq(elements - 1).after(tableHtml); //在表頭之後添加空白行
num++;
}
我們可以看到在<tb>標簽中我們添加了<input>標簽,主要是用來提供用戶輸入參數, 而全局變量num,主要是用來區分每一個添加的參數的id的唯一性而存在的。
4.接下來我們對表格進行操作
//刪除行
function removeTr(trNum){
$("#tr"+trNum).remove();
}
//編輯行
function editDataByOne(trNum){
$this = $("#tr"+trNum);
$(".addtd",$this).removeAttr("readonly");
}
//保存行
function saveByOne(trNum){
$this = $("#tr"+trNum);
$(".addtd",$this).attr("readonly","readonly");
}
上面我們對表格進行了刪除,編輯,保存等操作,具體操作內容可以根據需求調整。(其實後來我發現可以不需要全局num,也可以實現對添加行的操作,至於怎麼實現,主要是一些js的操作,有空再研究吧)
至此,我們動態生成表格的頁面代碼就完結了。
上半篇我們講到了如何動態生成表格,接下來我們就講一下如何獲取表格中的多條數據,並提交至後台服務器。
在開發之前我也在網上找了一些資料,要麼太簡潔,要麼看不懂,但是他們大多數都提到了使用Json的方式將多個參數傳入後台,那麼我就根據這個思路編寫了如下的代碼。
1.首先我們來看一下如何獲得表格中的數據,還是結合上邊的例子
<div>
<form id="submitForm">
<table border="0" style="text-align: center;" width="100%" id="myTable">
<tr>
<td width="150px;">表頭1</td>
<td width="150px;">表頭2</td>
<td width="120px;">表頭3</td>
<td width="120px;">表頭4</td>
<td width="80px;">表頭5</td>
<td width="100px;">操作</td>
</tr>
</table>
</form>
<input type="button" value="添加" onclick="addTable();">
<input type="button" value="提交" onclick="save();">
</div>
我們可以看到在Table標簽的外層我們加了一層form標簽,並設置form標簽的id。
2.接下來我們根據jQuery的“serialize()”方法獲取表格中input標簽的參數
var msg = $("#submitForm").serialize(); //獲得後的msg的值:canshu1=xxx&canshu2=xxx&canshu3=xxx&canshu4=xxx&canshu5=xxx
3.拿到表格中的數據後,我們根據它值的形式把它轉換成json格式的數據
var json = "[{";
var msg2 = msg.split("&"); //先以“&”符號進行分割,得到一個key=value形式的數組
var t = false;
for(var i = 0; i<msg2.length; i++){
var msg3 = msg2[i].split("="); //再以“=”進行分割,得到key,value形式的數組
for(var j = 0; j<msg3.length; j++){
json+="\""+msg3[j]+"\"";
if(j+1 != msg3.length){
json+=":";
}
if(t){
json+="}";
if(i+1 != msg2.length){ //表示是否到了當前行的最後一列
json+=",{";
}
t=false;
}
if(msg3[j] == "canshu5"){ //這裡的“canshu5”是你的表格的最後一列的input標簽的name值,表示是否到了當前行的最後一個input
t = true;
}
}
if(!msg2[i].match("canshu5")){ //同上
json+=";";
}
}
json+="]";
//最終msg的值就被轉換為:[{"key":"value";"key":"value"},{"key":"value";"key":"value"}]格式的json數據
通過上述代碼,我們已經成功的將表格中的多條數據轉換成了json格式的數據,那麼我們就可以通過ajax的方式將Json數據發送到後台處理。
至此,我們獲取表格中的多條數據並提交至服務器的代碼就編寫完了,希望對大家的學習有所幫助。