`

一、动态表格传值(JS+Servlet)-(原创-logoc)

阅读更多

一、动态表格编辑+传值(JS+Servlet)

 

网上有很多关于如何动态添加表格(行),但是动态表格生成后的传值缺少相关资料,现将自己的体会分享给大家。

1、动态添加表格

  代码修改至网上实例,相信大家也可做到!(非重点)

1)对象获取
/**
 * @function  根据id值查找对象
 * @param thObj  id值
 * @param theDoc 范围
 * @return foundObj id值对应的对象
 * @author 李亮
 * @date 2011.5.2
 * **/
 function findObj(theObj, theDoc){  
	var p, i, foundObj;    
	if(!theDoc) 
		theDoc = document;  
	if( (p = theObj.indexOf("?")) > 0 && parent.frames.length){    
		theDoc = parent.frames[theObj.substring(p+1)].document;
		theObj = theObj.substring(0,p);  
	}
	if(!(foundObj = theDoc[theObj]) && theDoc.all) 
		foundObj = theDoc.all[theObj];  
		for (i=0; !foundObj && i < theDoc.forms.length; i++)     
			foundObj = theDoc.forms[i][theObj];  
				for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)     
					foundObj = findObj(theObj,theDoc.layers[i].document);  
					if(!foundObj && document.getElementById) 
						foundObj = document.getElementById(theObj);    
					return foundObj;
  }
2)添加表格行
/**
 * @function  添加鲜土样处理信息
 * @param null
 * @author 李亮
 * @date 2011.5.1
 * **/
function AddFreshSoilTableRow(){ 
  //读取最后一行的行号,存放在txtTRLastIndex文本框中 
	var txtTRLastIndex = findObj("txtTRLastIndex",document);
	var rowID = parseInt(txtTRLastIndex.value);
	
 	var sampleTable = findObj("sampleTable",document);
 //添加行   
 	var newTR = sampleTable.insertRow(sampleTable.rows.length);
 	newTR.id = "tableTR" + rowID;
 	newTR.align="center";
 	
 //添加列:序号
 	var newNameTD = newTR.insertCell(0);
 //添加列内容
 	newNameTD.innerHTML = newTR.rowIndex.toString();
 
  //添加列:原始编号
 	var newYsbhTD=newTR.insertCell(1);
 //添加列内容
 	newYsbhTD.innerHTML = "<input name='txtYsbh' id='txtYsbh' type='text' size='12'/>";
 	
 //添加列:统一编号
 	var newTybhTD=newTR.insertCell(2);
 //添加列内容
 	newTybhTD.innerHTML = "<input name='txtTybh' id='txtTybh' type='text' size='12'/>";
 
 //添加列:实验室编号
 	var newSysbhTD=newTR.insertCell(3);
 //添加列内容
 	newSysbhTD.innerHTML = "<input  name='txtSysbh' id='txtSysbh' type='text' size='12'/>";
 
 //添加列:处理内容
 	var newClTD=newTR.insertCell(4);
 //添加列内容
 	newClTD.innerHTML = "<input  name='txtCl' id='txtCl' type='text' size='12'/>";
 	
 //添加列:重复次数
 	var newCfTD=newTR.insertCell(5);
 //添加列内容
 	newCfTD.innerHTML = "<input name='txtCf' id='txtCf' type='text' size='6'/>"; 
 
 //添加列:硝态氮
 	var newXtNTD=newTR.insertCell(6);
 //添加列内容
 	newXtNTD.innerHTML = "<input type='checkbox' name='selAllXtN'/>";
 
 //添加列:铵态氮
 	var newAtNTD=newTR.insertCell(7);	
 //添加列内容
 	newAtNTD.innerHTML = "<input type='checkbox' name='selAllAtN' />";
 	
 //添加列:WaterPer
 	var newWaterPerTD=newTR.insertCell(8);
 //添加列内容
 	newWaterPerTD.innerHTML = "<input type='checkbox' name='selAllWaterPer' id='isWaterPer' />";
 	
 //添加删除列操作
	var newDeleteTD=newTR.insertCell(9);
 //添加列内容
 	newDeleteTD.innerHTML = "<div align='center' style='width:45px'><input type='button' name='saveSubmit' value='删除' onclick=\"DeleteTableRow('" + newTR.id +"')\"/>	</div>";
 
 //将行号推进下一行
 	txtTRLastIndex.value = (rowID + 1).toString() ;
}


3)删除表格行
	/**
	 * @function  删除指定行
	 * 
	 * **/
	function DeleteTableRow(rowid){
		var sampleTable = findObj("sampleTable",document);
		//var plantTable = document.get
		var tableItem = findObj(rowid,document);
 		//获取将要删除的行的Index
 		var rowIndex = tableItem.rowIndex;
 		//删除指定Index的行
 		sampleTable.deleteRow(rowIndex);
 	
 		//重新排列序号,如果没有序号,这一步省略
 		for(var i=rowIndex;i<sampleTable.rows.length;i++){
 			sampleTable.rows[i].cells[0].innerHTML = i.toString();
 		}
	}//清空列表


4)JSP or HTML页面代码
<div>
	<table width="100%" border="0" cellpadding="2" cellspacing="1" id="sampleTable">
             	<tr id="trHeader" align="center">
			<td width="70" bgcolor="#96E0E2">序号</td>
  		 	<td width="109" bgcolor="#96E0E2">原始ID</td>
  		 	<td width="109" bgcolor="#96E0E2">统一ID</td>
  		 	<td width="109" bgcolor="#96E0E2">实验室ID</td>
  		 	<td width="109" bgcolor="#96E0E2">处理内容</td>
  		 	<td width="93" bgcolor="#96E0E2">重复次数</td>
  		 	<td width="96" bgcolor="#96E0E2" >硝态氮<br /><input type="checkbox" id="selAllXtN" onclick="selectAllBox(this.id);"/></td>
  		 	<td width="96" bgcolor="#96E0E2" align="center">铵态氮<br /><input type="checkbox" id="selAllAtN" onclick="selectAllBox(this.id);"/></td>
  		 	<td width="96" bgcolor="#96E0E2" align="center">含水率<br /><input type="checkbox" id="selAllWaterPer" onclick="selectAllBox(this.id);"/></td>
			<td width="70" bgcolor="#96E0E2">操作</td>
		</tr>
	</table>
</div>
<div>
	<input type="button" name="addSubmit" value="添加" onclick="AddFreshSoilTableRow()" /> 
	<input type="button" name="clearSubmit" value="清空" onclick="ClearAllContent()" />	
	<input name='txtTRLastIndex' type='hidden' id='txtTRLastIndex' value="1" />													
	<input type="submit" name="saveSubmit" value="保存" onclick="SaveAllContent()"/>		
	<input type="text" id="sampleInfo" style="display:none"/>							
</div> 

 2、动态表格传值(重点,原创哦)

不管有没有人这么做过,但是这个方法是我自己想出来的,也是一点点写出来了。或许大家会有更好的方法,如有也请分享一下。

思路:在提交之前,将动态表格中的内容放到一个隐藏的<input style=“display:none” name="tableData" type="text" />中,通过这个统一将表格中的内容传递过去,这个大家都应该很明白什么意思了吧!

注意事项:通过JS向后台传递中文,与用form传递,字符解析方法是不同的。但中文字符传递一定要解析,不让会出现乱码,这一点很重要,网上有相关的资料,这里不再一一陈述。


具体做法(附代码)

 

 

1)页面代码
<input type="submit" name="saveSubmit" value="提交" onclick="SaveAllContent()"/>		
<input type="text" id="tableData" style="display:none"/>	

2)JS代码
/**
 * @function 保存表格内容
 * @ autor 李亮
 * 
 * **/	
function SaveAllContent(){
		if(confirm('确定要录入吗?')){
			var sampleTable = findObj("sampleTable",document);
			var rowsNum = sampleTable.rows.length; 			
			var arr = new Array(rowsNum);
			
			for(var i = 1;i < rowsNum; i++){			
				var rowId = "tableTR"+i;
				var rowTr = findObj(rowId,document);
				arr[i-1] = new Array(rowTr.cells.length-1);
				
				for (var j = 1;j < rowTr.cells.length; j++){
					if(sampleTable.rows[i].cells[j].children[0].type=="text"){
						arr[i-1][j-1] = sampleTable.rows[i].cells[j].children[0].value;
					}else if(sampleTable.rows[i].cells[j].children[0].type=="checkbox"){
						arr[i-1][j-1] = sampleTable.rows[i].cells[j].children[0].checked;
					}else{
						arr[i-1][j-1] = "#";
					}
				}
			}
			var tableData = findObj("tableData",document);
			tableData.value = arr;
		}
	}	

4)后台处理(Java)将字符创转换为二位数组,并用Bean类保存
/**
 * 
 * @param tableDate 页面js生成动态表中 传递过来的表格内容
 * @function String类型的tableDate转换为链表存储
 * @return ArrayList<FreshSoilBean> 鲜土样信息链表
 * @author 李亮
 * @date 2011.5.6
  * **/
	public ArrayList<FreshSoilBean> handFreshSoilTableData(String tableDate){		
		ArrayList<FreshSoilBean> list = new ArrayList<FreshSoilBean>();
		String[] tableRows = tableDate.split("#,");
		for(int i=0;i<tableRows.length;i++){		
			String[] tableCells = tableRows[i].split(",");
			for(int j=0;j<tableCells.length;j++){
				if(tableCells[j].equals("true"))
					tableCells[j]="1";
				else if(tableCells[j].equals("false"))
					tableCells[j]="0";
			}
			FreshSoilBean freshSoilBean = new FreshSoilBean();
			freshSoilBean.setPrid(tableCells[0]);
			freshSoilBean.setUnid(tableCells[1]);
			freshSoilBean.setExid(tableCells[2]);			
			freshSoilBean.setDealContent(tableCells[3]);
			freshSoilBean.setEchoNum(tableCells[4]);
			freshSoilBean.setIsWaterPer(tableCells[5]);
			freshSoilBean.setIsXtN(tableCells[6]);
			freshSoilBean.setIsAtN(tableCells[7]);
			freshSoilBean.setIsDone("0");
			list.add(freshSoilBean);			
		}
		return list;
	}

 

 3、小结

以上是我在做实验室数据管理系统的心得,Javascript能够很好的减轻后台数据处理负担,而今天Ajax的应用,让Javascript有了新的活力,也改变了很多人对Javascript的认识。对于想对Javascript有深入的了解童鞋,我强烈建议阅读一下《JavaScrpt 高级程序设计》图灵教育,人民邮电出版社出版。额,后续,我会陆续将我在Javascript其他体会写出来,大概会有Ajax(JavaScript+Servlet)实现案例代码;类万方、知网数据检索的前台实现;Javascript实现Excel导入导出等功能,等等Javascript其他应用。

 

分享到:
评论
1 楼 QQ1145306946 2013-05-30  
能不能把完整点的代码给我呢?

相关推荐

    公司漂亮的标识LOGO

    一个优秀的LOGO设计不仅能够吸引人们的注意力,还能在众多竞争者中使你的公司脱颖而出。"公司漂亮的标识LOGO"这个主题强调了设计在商业中的关键作用,尤其是对于提升品牌形象和识别度。 LOGO设计通常包含以下几个...

    银行logo.rar(117个)

    "银行logo.rar(117个)"这个压缩包文件收集了全国117家银行的官方标志,对于设计、研究、教学或是银行业务了解来说,都是一份非常宝贵的资源。 首先,我们来谈谈银行logo的设计要素。一个优秀的银行logo通常包含以下...

    CH02- CMD Machine CC.rar_adaptive control_dc fuzzy_dc machine

    dc machine control using fuzzy logoc

    基于ssm的网络教学平台(有报告)。Javaee项目,ssm项目。

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/144929660 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

    2024年AI代码平台及产品发展简报-V11.pdf

    2024年AI代码平台及产品发展简报-V11

    蓝桥杯JAVA代码.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    QPSK调制解调技术研究与FPGA实现:详细实验文档的探索与实践,基于FPGA实现的QPSK调制解调技术:实验文档详细解读与验证,QPSK调制解调 FPGA设计,有详细实验文档 ,QPSK调制解调;

    QPSK调制解调技术研究与FPGA实现:详细实验文档的探索与实践,基于FPGA实现的QPSK调制解调技术:实验文档详细解读与验证,QPSK调制解调 FPGA设计,有详细实验文档 ,QPSK调制解调; FPGA设计; 详细实验文档,基于QPSK调制的FPGA设计与实验文档

    PID、ADRC和MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的Simulink仿真研究,PID、ADRC与MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的仿真研

    PID、ADRC和MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的Simulink仿真研究,PID、ADRC与MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的仿真研究,PID, ADRC和MPC轨迹跟踪控制器Simulink仿真模型。 MPC用于跟踪轨迹 ADRC用于跟踪理想横摆角 PID用于跟踪轨迹 轨迹工况有双移线,避障轨迹,正弦轨迹多种 matlab版本为2018,carsim版本为8 ,PID; ADRC; MPC; 轨迹跟踪控制器; Simulink仿真模型; 双移线; 避障轨迹; 正弦轨迹; MATLAB 2018; CarSim 8,基于Simulink的PID、ADRC与MPC轨迹跟踪控制器仿真模型研究

    基于Springboot的个性化图书推荐系统。Javaee项目,springboot项目。

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/144486173 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

    Matlab实现Transformer-Adaboost时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一个利用Matlab实现Transformer-Adaboost结合的时间序列预测项目实例。项目涵盖Transformer架构的时间序列特征提取与建模,Adaboost集成方法用于增强预测性能,以及详细的模型设计思路、训练、评估过程和最终的GUI可视化。整个项目强调数据预处理、窗口化操作、模型训练及其优化(包括正则化、早停等手段)、模型融合策略和技术部署,如GPU加速等,并展示了通过多个评估指标衡量预测效果。此外,还提出了未来的改进建议和发展方向,涵盖了多层次集成学习、智能决策支持、自动化超参数调整等多个方面。最后部分阐述了在金融预测、销售数据预测等领域中的广泛应用可能性。 适合人群:具有一定编程经验的研发人员,尤其对时间序列预测感兴趣的研究者和技术从业者。 使用场景及目标:该项目适用于需要进行高质量时间序列预测的企业或机构,比如金融机构、能源供应商和服务商、电子商务公司。目标包括但不限于金融市场的波动性预测、电力负荷预估和库存管理。该系统可以部署到各类平台,如Linux服务器集群或云计算环境,为用户提供实时准确的预测服务,并支持扩展以满足更高频率的数据吞吐量需求。 其他说明:此文档不仅包含了丰富的理论分析,还有大量实用的操作指南,从项目构思到具体的代码片段都有详细记录,使用户能够轻松复制并改进这一时间序列预测方案。文中提供的完整代码和详细的注释有助于加速学习进程,并激发更多创新想法。

    液滴穿越障碍:从文献到案例的复现研究,液滴破裂与障碍物穿越:文献复现案例研究,液滴生成并通过障碍物破裂 该案例是文献复现,文献与案例一起 ,液滴生成; 障碍物破裂; 文献复现; 案例研究,液滴破

    液滴穿越障碍:从文献到案例的复现研究,液滴破裂与障碍物穿越:文献复现案例研究,液滴生成并通过障碍物破裂。 该案例是文献复现,文献与案例一起。 ,液滴生成; 障碍物破裂; 文献复现; 案例研究,液滴破裂:障碍挑战的文献复现案例

    蓝桥杯练习题_2.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    蓝桥杯笔记,用于个人学习进步.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    基于最小递归二乘法的MPC自适应轨迹跟踪控制优化 针对轮胎刚度时变特性提升模型精度与鲁棒性,仿真验证满足车辆低速高精度跟踪与高速稳定性提升 ,基于变预测时域MPC自适应轨迹跟踪控制与轮胎侧偏刚度优化提

    基于最小递归二乘法的MPC自适应轨迹跟踪控制优化 针对轮胎刚度时变特性提升模型精度与鲁棒性,仿真验证满足车辆低速高精度跟踪与高速稳定性提升。,基于变预测时域MPC自适应轨迹跟踪控制与轮胎侧偏刚度优化提升模型精度和鲁棒性,基于变预测时域的MPC自适应轨迹跟踪控制,针对轮胎刚度时变的特点造成控制模型精度降低,基于最小递归二乘法(RLS)估算的轮胎侧偏刚度,提升了模型的控制精度和鲁棒性,通过carsim与simulink联合仿真结果发现,改进后的轨迹跟踪控制器既满足了车辆低速行驶下的轨 迹跟踪精度,也一定程度上克服了高速下车辆容易失去稳定性的问题。 有详细的lunwen分析说明和资料,以及本人的,仿真包运行。 ,基于变预测时域的MPC; 自适应轨迹跟踪控制; 轮胎刚度时变; 控制模型精度降低; 最小递归二乘法(RLS)估算; 模型控制精度和鲁棒性提升; carsim与simulink联合仿真; 轨迹跟踪控制器; 车辆稳定性。,基于变预测时域MPC的轮胎刚度自适应轨迹跟踪控制策略研究

    GMSK调制解调技术研究:基于FPGA设计与实验详解,GMSK调制解调技术详解:基于FPGA设计的实验文档与实践应用,GMSK调制解调 FPGA设计,有详细实验文档 ,GMSK调制解调; FPGA设计

    GMSK调制解调技术研究:基于FPGA设计与实验详解,GMSK调制解调技术详解:基于FPGA设计的实验文档与实践应用,GMSK调制解调 FPGA设计,有详细实验文档 ,GMSK调制解调; FPGA设计; 详细实验文档; 实验结果分析,GMSK调制解调技术:FPGA设计与实验详解

    (源码)基于Arduino和Python的Cansat卫星系统.zip

    # 基于Arduino和Python的Cansat卫星系统 ## 项目简介 本项目是一个Cansat卫星系统,旨在设计和实现一个小型卫星模型,通过火箭发射至1公里高空,并使用地面站接收其传输的数据。项目涉及Arduino编程、Python数据处理和可视化。 ## 主要特性和功能 1. 硬件组件 使用Arduino Nano作为Cansat的微控制器。 搭载BMP 280温度和压力传感器、ATGM336H GPS模块、LoRa通信模块等。 地面站使用Arduino Uno和LoRa通信模块接收数据。 2. 数据处理 使用Python进行数据处理和可视化,包括数据清洗、计算风速、绘制温度、压力、风速和海拔随时间变化的图表等。 3. 通信与控制 通过LoRa模块实现Cansat与地面站之间的数据传输。 提供实时监视和记录数据的脚本。 ## 安装和使用步骤 ### 1. 硬件准备

    LongSung-USB-Drivers-V2.0-for-Windows

    U9300C 龙尚4G模块安装后模块才能正常使用,win7 win10驱动程序,支持USB转接板。

    (源码)基于Arduino平台的物联网温湿度监控系统.zip

    # 基于Arduino平台的物联网温湿度监控系统 ## 项目简介 这是一个基于Arduino平台的物联网温湿度监控项目,旨在通过简单的硬件设备实现环境数据的实时监测与远程管理。该项目适用于智能家居、农业种植等领域。 ## 项目的主要特性和功能 1. 温湿度数据采集通过Arduino板连接温湿度传感器,实时采集环境数据。 2. 数据传输将采集到的数据通过无线网络模块发送到服务器或远程终端。 3. 数据可视化可在电脑或移动设备端展示实时的温湿度数据。 4. 报警功能当温湿度数据超过预设阈值时,自动触发报警通知。 ## 安装使用步骤 前提假设用户已经下载了本项目的源码文件。以下是简单明了的安装使用步骤 1. 环境准备安装Arduino开发环境,配置必要的硬件接口。 2. 硬件连接将Arduino板与温湿度传感器、无线网络模块连接。 3. 代码上传将本项目提供的Arduino代码上传至Arduino板。

    基于需求响应与清洁能源接入的配电网重构优化:综合成本与混合整数凸规划模型分析(matlab实现),基于需求响应与清洁能源接入的配电网重构算法研究:网损与成本优化的仿真分析,高比例清洁能源接入下计及需求

    基于需求响应与清洁能源接入的配电网重构优化:综合成本与混合整数凸规划模型分析(matlab实现),基于需求响应与清洁能源接入的配电网重构算法研究:网损与成本优化的仿真分析,高比例清洁能源接入下计及需求响应的配电网重构(matlab代码) 该程序复现《高比例清洁能源接入下计及需求响应的配电网重构》,以考虑网损成本、弃风弃光成本和开关操作惩罚成本的综合成本最小为目标,针对配电网重构模型的非凸性,引入中间变量并对其进行二阶锥松弛,构建混合整数凸规划模型,采用改进的 IEEE33 节点配电网进行算例仿真,分析了需求响应措施和清洁能源渗透率对配电网重构结果的影响。 该程序复现效果和出图较好(详见程序结果部分),注释清楚,方便学习 ,高比例清洁能源; 需求响应; 配电网重构; 二阶锥松弛; 综合成本最小化; MATLAB代码; IEEE33节点配电网; 复现效果; 出图; 注释清楚。,Matlab代码复现:高比例清洁能源接入下的配电网重构模型与需求响应分析

    (源码)基于C++的RapidJSON库测试项目.zip

    # 基于C++的RapidJSON库测试项目 ## 项目简介 本项目是一个基于C++的RapidJSON库测试项目,主要用于测试RapidJSON库的功能正确性、性能以及稳定性。RapidJSON是一个高效的C++ JSON解析生成库,广泛应用于各种场景。本项目通过编写一系列的单元测试,覆盖了RapidJSON库的主要功能点,包括JSON解析、生成、内存管理、编码转换等,以确保RapidJSON库在各种情况下都能正确、稳定地工作。 ## 项目的主要特性和功能 1. 单元测试框架使用Google Test测试框架进行单元测试,确保测试的可靠性和可扩展性。 2. 全面测试覆盖覆盖了RapidJSON库的主要功能点,包括JSON解析、生成、内存管理、编码转换等,以及针对各种输入数据的测试。 3. 性能测试通过性能基准测试,评估RapidJSON库在处理不同规模和类型的JSON数据时的性能表现。

Global site tag (gtag.js) - Google Analytics