JS实现动态生成表格并提交表格数据向后端


Posted in Javascript onNovember 25, 2020

本文实例介绍了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数据发送到后台处理。

至此,我们获取表格中的多条数据并提交至服务器的代码就编写完了,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js 弹出框 替代浏览器的弹出框
Oct 29 Javascript
javascript重写alert方法的实例代码
Mar 29 Javascript
jquery时间下拉框小例子
Apr 15 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
Apr 24 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
Jan 27 #Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 #Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
Jan 27 #Javascript
不用一句js代码初始化组件
Jan 27 #Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
Jan 27 #Javascript
封装属于自己的JS组件
Jan 27 #Javascript
js+css绘制颜色动态变化的圈中圈效果
Jan 27 #Javascript
You might like
PHP5 面向对象程序设计
2008/02/13 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
java script编程起步(第三课)
2007/01/10 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python实现银行实战系统
2020/02/26 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
门卫人员岗位职责
2013/12/24 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
男方婚礼答谢词
2015/01/20 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis