JS實現(xiàn)動態(tài)生成表格并提交表格數(shù)據(jù)向后端
本文實例介紹了JS實現(xiàn)動態(tài)生成表格并向后端提交表格數(shù)據(jù)的相關(guān)代碼,分享給大家供大家參考,具體內(nèi)容如下
先來看一下需求:在web頁面上動態(tài)的生成表格,并可以對表格中的數(shù)據(jù)進行編輯,然后把表格中的數(shù)據(jù)提交至后端服務(wù)器保存。
那么我們首先需要解決的是動態(tài)生成表格的問題
1.首先我們需要導入JS庫文件。
<script src="../js/jqui/jquery/jquery-1.5.2.min.js" type="text/javascript"></script>
2.然后在頁面div中事先創(chuàng)建一個空白表格,可以根據(jù)需求而定,我這里是一個帶表頭的表格
<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.表格創(chuàng)建好后,我們就可以寫動態(tài)生成表格的關(guān)鍵代碼了。我們寫一個js方法供觸發(fā)使用
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”的標簽下的子標簽的個數(shù) $("#myTable").children().eq(elements - 1).after(tableHtml); //在表頭之后添加空白行 num++; }
我們可以看到在<tb>標簽中我們添加了<input>標簽,主要是用來提供用戶輸入?yún)?shù), 而全局變量num,主要是用來區(qū)分每一個添加的參數(shù)的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"); }
上面我們對表格進行了刪除,編輯,保存等操作,具體操作內(nèi)容可以根據(jù)需求調(diào)整。(其實后來我發(fā)現(xiàn)可以不需要全局num,也可以實現(xiàn)對添加行的操作,至于怎么實現(xiàn),主要是一些js的操作,有空再研究吧)
至此,我們動態(tài)生成表格的頁面代碼就完結(jié)了。
上半篇我們講到了如何動態(tài)生成表格,接下來我們就講一下如何獲取表格中的多條數(shù)據(jù),并提交至后臺服務(wù)器。
在開發(fā)之前我也在網(wǎng)上找了一些資料,要么太簡潔,要么看不懂,但是他們大多數(shù)都提到了使用Json的方式將多個參數(shù)傳入后臺,那么我就根據(jù)這個思路編寫了如下的代碼。
1.首先我們來看一下如何獲得表格中的數(shù)據(jù),還是結(jié)合上邊的例子
<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標簽,并設(shè)置form標簽的id。
2.接下來我們根據(jù)jQuery的“serialize()”方法獲取表格中input標簽的參數(shù)
var msg = $("#submitForm").serialize(); //獲得后的msg的值:canshu1=xxx&canshu2=xxx&canshu3=xxx&canshu4=xxx&canshu5=xxx
3.拿到表格中的數(shù)據(jù)后,我們根據(jù)它值的形式把它轉(zhuǎn)換成json格式的數(shù)據(jù)
var json = "[{"; var msg2 = msg.split("&"); //先以“&”符號進行分割,得到一個key=value形式的數(shù)組 var t = false; for(var i = 0; i<msg2.length; i++){ var msg3 = msg2[i].split("="); //再以“=”進行分割,得到key,value形式的數(shù)組 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的值就被轉(zhuǎn)換為:[{"key":"value";"key":"value"},{"key":"value";"key":"value"}]格式的json數(shù)據(jù)
通過上述代碼,我們已經(jīng)成功的將表格中的多條數(shù)據(jù)轉(zhuǎn)換成了json格式的數(shù)據(jù),那么我們就可以通過ajax的方式將Json數(shù)據(jù)發(fā)送到后臺處理。
至此,我們獲取表格中的多條數(shù)據(jù)并提交至服務(wù)器的代碼就編寫完了,希望對大家的學習有所幫助。
相關(guān)文章
用javascript獲取任意顏色的更亮或更暗顏色值示例代碼
最近在工作中遇到的一個需求,發(fā)現(xiàn)網(wǎng)上沒有相對應(yīng)的解決方法,索性自己寫一個,所以這篇文章主要給大家介紹了關(guān)于利用javascript獲取任意顏色更亮或更暗顏色值的相關(guān)資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07JS實現(xiàn)獲取毫秒值及轉(zhuǎn)換成年月日時分秒的方法
這篇文章主要介紹了JS實現(xiàn)獲取毫秒值及轉(zhuǎn)換成年月日時分秒的方法,結(jié)合實例形式分析了javascript常見的Date()日期時間獲取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-08-08javascript實現(xiàn)動態(tài)模態(tài)綁定grid過程代碼
這篇文章主要分享javascript實現(xiàn)動態(tài)模態(tài)綁定grid過程代碼,比較實用,需要的朋友可以參考下2014-09-09JS區(qū)分Object與Aarry的六種方法總結(jié)
下面小編就為大家?guī)硪黄狫S區(qū)分Object與Aarry的六種方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02