JS實(shí)現(xiàn)動(dòng)態(tài)生成表格并提交表格數(shù)據(jù)向后端
本文實(shí)例介紹了JS實(shí)現(xiàn)動(dòng)態(tài)生成表格并向后端提交表格數(shù)據(jù)的相關(guān)代碼,分享給大家供大家參考,具體內(nèi)容如下
先來(lái)看一下需求:在web頁(yè)面上動(dòng)態(tài)的生成表格,并可以對(duì)表格中的數(shù)據(jù)進(jìn)行編輯,然后把表格中的數(shù)據(jù)提交至后端服務(wù)器保存。
那么我們首先需要解決的是動(dòng)態(tài)生成表格的問(wèn)題
1.首先我們需要導(dǎo)入JS庫(kù)文件。
<script src="../js/jqui/jquery/jquery-1.5.2.min.js" type="text/javascript"></script>
2.然后在頁(yè)面div中事先創(chuàng)建一個(gè)空白表格,可以根據(jù)需求而定,我這里是一個(gè)帶表頭的表格
<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)建好后,我們就可以寫動(dòng)態(tài)生成表格的關(guān)鍵代碼了。我們寫一個(gè)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”的標(biāo)簽下的子標(biāo)簽的個(gè)數(shù)
$("#myTable").children().eq(elements - 1).after(tableHtml); //在表頭之后添加空白行
num++;
}
我們可以看到在<tb>標(biāo)簽中我們添加了<input>標(biāo)簽,主要是用來(lái)提供用戶輸入?yún)?shù), 而全局變量num,主要是用來(lái)區(qū)分每一個(gè)添加的參數(shù)的id的唯一性而存在的。
4.接下來(lái)我們對(duì)表格進(jìn)行操作
//刪除行
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");
}
上面我們對(duì)表格進(jìn)行了刪除,編輯,保存等操作,具體操作內(nèi)容可以根據(jù)需求調(diào)整。(其實(shí)后來(lái)我發(fā)現(xiàn)可以不需要全局num,也可以實(shí)現(xiàn)對(duì)添加行的操作,至于怎么實(shí)現(xiàn),主要是一些js的操作,有空再研究吧)
至此,我們動(dòng)態(tài)生成表格的頁(yè)面代碼就完結(jié)了。
上半篇我們講到了如何動(dòng)態(tài)生成表格,接下來(lái)我們就講一下如何獲取表格中的多條數(shù)據(jù),并提交至后臺(tái)服務(wù)器。
在開發(fā)之前我也在網(wǎng)上找了一些資料,要么太簡(jiǎn)潔,要么看不懂,但是他們大多數(shù)都提到了使用Json的方式將多個(gè)參數(shù)傳入后臺(tái),那么我就根據(jù)這個(gè)思路編寫了如下的代碼。
1.首先我們來(lái)看一下如何獲得表格中的數(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標(biāo)簽的外層我們加了一層form標(biāo)簽,并設(shè)置form標(biāo)簽的id。
2.接下來(lái)我們根據(jù)jQuery的“serialize()”方法獲取表格中input標(biāo)簽的參數(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("&"); //先以“&”符號(hào)進(jìn)行分割,得到一個(gè)key=value形式的數(shù)組
var t = false;
for(var i = 0; i<msg2.length; i++){
var msg3 = msg2[i].split("="); //再以“=”進(jìn)行分割,得到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){ //表示是否到了當(dāng)前行的最后一列
json+=",{";
}
t=false;
}
if(msg3[j] == "canshu5"){ //這里的“canshu5”是你的表格的最后一列的input標(biāo)簽的name值,表示是否到了當(dāng)前行的最后一個(gè)input
t = true;
}
}
if(!msg2[i].match("canshu5")){ //同上
json+=";";
}
}
json+="]";
//最終msg的值就被轉(zhuǎn)換為:[{"key":"value";"key":"value"},{"key":"value";"key":"value"}]格式的json數(shù)據(jù)
通過(guò)上述代碼,我們已經(jīng)成功的將表格中的多條數(shù)據(jù)轉(zhuǎn)換成了json格式的數(shù)據(jù),那么我們就可以通過(guò)ajax的方式將Json數(shù)據(jù)發(fā)送到后臺(tái)處理。
至此,我們獲取表格中的多條數(shù)據(jù)并提交至服務(wù)器的代碼就編寫完了,希望對(duì)大家的學(xué)習(xí)有所幫助。
- JS實(shí)現(xiàn)動(dòng)態(tài)生成html table表格的方法分析
- js生成動(dòng)態(tài)表格并為每個(gè)單元格添加單擊事件的方法
- JS控制網(wǎng)頁(yè)動(dòng)態(tài)生成任意行列數(shù)表格的方法
- js動(dòng)態(tài)生成指定行數(shù)的表格
- JS實(shí)現(xiàn)從表格中動(dòng)態(tài)刪除指定行的方法
- JS對(duì)HTML表格進(jìn)行增刪改操作
- 動(dòng)態(tài)添加刪除表格行的js實(shí)現(xiàn)代碼
- 基于JavaScript實(shí)現(xiàn)動(dòng)態(tài)添加刪除表格的行
- JavaScript獲取表格(table)當(dāng)前行的值、刪除行、增加行
- JavaScript動(dòng)態(tài)生成帶刪除行功能的表格
相關(guān)文章
認(rèn)識(shí)延遲時(shí)間為0的setTimeout
由 John Resig 的 How JavaScript Timers Work 可以知道,現(xiàn)有的 JavaScript 引擎是單線程處理任務(wù)的。它把任務(wù)放到隊(duì)列中,不會(huì)同步去執(zhí)行,必須在完成一個(gè)任務(wù)后才開始另外一個(gè)任務(wù)。2008-05-05
JS實(shí)現(xiàn)二叉查找樹的建立以及一些遍歷方法實(shí)現(xiàn)
本篇文章主要介紹了JS實(shí)現(xiàn)二叉查找樹的建立以及一些遍歷方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
JavaScript中自帶的 reduce()方法使用示例詳解
下文小編給大家?guī)?lái)了js中自帶的reduce()方法使用示例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-08-08
Bootstrap模態(tài)框水平垂直居中與增加拖拽功能
最近開發(fā)一個(gè)CMS系統(tǒng)使用上了Bootstrap,在開發(fā)一個(gè)添加某些選項(xiàng)時(shí),打算彈出一個(gè)模態(tài)框,但是發(fā)現(xiàn),模態(tài)框不會(huì)垂直居中到屏幕上,而是在屏幕上方,通過(guò)查閱資料才解決此問(wèn)題,下面小編給大家分享解決思路2016-11-11
js點(diǎn)擊按鈕實(shí)現(xiàn)多張圖片循環(huán)切換
這篇文章主要為大家詳細(xì)介紹了js點(diǎn)擊按鈕實(shí)現(xiàn)多張圖片循環(huán)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Grunt入門教程(自動(dòng)任務(wù)運(yùn)行器)
Grunt是一個(gè)自動(dòng)任務(wù)運(yùn)行器,會(huì)按照預(yù)先設(shè)定的順序自動(dòng)運(yùn)行一系列的任務(wù)。這可以簡(jiǎn)化工作流程,減輕重復(fù)性工作帶來(lái)的負(fù)擔(dān)2015-08-08

