JS动态生成表格及数据提交后端实现
本文介绍如何使用JavaScript和jQuery动态生成可编辑表格,并通过serialize方法获取数据,手动转换为JSON格式后利用Ajax提交至后端服务器。
动态生成表格及提交后端实现概述
本文详解了利用JavaScript动态生成表格并将表格数据提交至后端的完整实现方案,供读者参考学习。
主要需求包括在Web页面中动态构建表格结构,支持对表格内数据进行编辑操作,并最终将处理后的数据提交至后端服务器进行保存。
动态生成表格的实现步骤
实现该功能的首要任务是解决表格的动态生成问题。
第一步,需引入必要的JS库文件。
<script src="../js/jqui/jquery/jquery-1.5.2.min.js" type="text/javascript"></script>
第二步,在页面的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>
第三步,在表格结构创建完成后,编写实现动态生成表格的核心JS逻辑,并封装为可触发的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++;
}
在表格行(<tr>)标签中嵌入了<input>元素,用于接收用户输入的参数。同时定义全局变量num,用于确保每个添加行的ID具有唯一性。
第四步,对生成的表格执行后续操作。
//删除行
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格式向后台传输多个参数。基于此思路,编写了如下实现代码。
首先,演示如何从表格中提取数据,结合前文示例进行说明。
<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标签,并为其设置唯一的id属性。
接下来,利用jQuery提供的“serialize()”方法获取表格中所有input标签的参数值。
var msg = $("#submitForm").serialize(); //获得后的msg的值:canshu1=xxx&canshu2=xxx&canshu3=xxx&canshu4=xxx&canshu5=xxx
获取到表格数据后,根据其字符串形式将其转换为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数据发送至后台进行处理。
至此,获取表格多条数据并提交至服务器的代码编写完毕,希望对读者有所帮助。
NestJS 是什么?与 Express、Koa 的核心区别及选型建议
2026-11-05 13:46:41
生产环境升级 Node.js 的注意事项与兼容性测试策略
2026-11-05 09:19:24
nvm 常用命令详解:怎么平滑切换和升级 Node.js 版本
2026-11-04 09:02:34
JavaScript和JSP的根本区别:运行环境与执行机制解析
2026-11-03 23:30:18
使用nvm卸载指定版本Node.js并切换默认环境
2026-11-03 23:09:26
