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 相关文章推荐
我遇到的参数传递中 双引号单引号嵌套问题
Feb 11 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
jQuery Html控件基本操作(日常收集整理)
Mar 11 Javascript
Node.js操作mysql数据库增删改查
Mar 30 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
jQuery实现图片下载代码
Jul 18 jQuery
vue框架中props的typescript用法详解
Feb 17 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
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
Zend引擎的发展 [15]
2006/10/09 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
Python类属性的延迟计算
2016/10/22 Python
python数据结构之链表详解
2017/09/12 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
主管会计岗位责任制
2014/02/10 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库