ajaxFileUpload+struts2多文件上传(动态添加文件上传框)

简介:

上一篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多文件上传,

但仅仅是固定的文件个数,假设需求不确定是多少文件 则我们就须要动态的加入文件上传框。以实现灵活性。

基于上篇基本框架是不变的,主要改动下面几个方面

1、jQuery实现动态加入删除文件上传框

2、获取文件上传框的ID

3、ajaxfileupload.js里将ID数组转换为须要的Object数组

依次解决上面问题

一、实现动态加入删除文件上传框

<body>
	<form action="" enctype="multipart/form-data">
		<h2>
			多文件上传
		</h2>
		<input type="file" id="file1" name="file" /><a id="add" href="javascript:void();" onclick="addFile();">加入</a>
		<span>
			<table id="down">
			</table>
		</span>
		</br>
		<input type="button" onclick="fileUpload();" value="上传">
	</form>
</body>
<script type="text/javascript">
	//加入附件 
	function addFile(){
		var fileLength = $("input[name=file]").length+1;
		var inputFile = "<div id='addFile"+fileLength+"'><input type='file' id='file"+fileLength+"' name='file' />"
					+"<a href='javascript:void();' onclick='delFile("+fileLength+");'>删除</a></div>";
		$("#add").after(inputFile);
	}
	//删除附件
	function delFile(id){
		$("#addFile"+id).remove();
	}
</script>

二、获取文件上传框的ID

由于我们不知道有多少个上传框,每次加入一个上传框,其id属性都是以file1,file2方式递增的

能够用each循环拼接字符

var files = "";
//获取全部 <input type="file" id="file1" name="file" /> 的ID属性值 
$("input[name=file]").each(function(){
	files = files + $(this).attr("id")+",";
})
//将字符最后一逗号(,)截取掉
files = files.substring(0,files.length-1);
然后我们获取的files值 如:var files = "file1,file2,file3";

能够使用console.info(typeof(files));查看files为string类型


三、ajaxfileupload.js里将ID数组转换为须要的Object数组

由于我们须要的是诸如var files = ['file1','file2','file3'];

而不是var files = "file1,file2,file3";

所以须要进行转换。事实上也未必非得在ajaxfileupload.js里进行操作

全然能够在获取ID时转换好 再传值过来。也无所谓在哪里了,方法都一样。

还是找到下面代码:

var oldElement = jQuery('#' + fileElementId);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr('id', fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);
在这段代码之上加入例如以下:

var t = '';
if(typeof(fileElementId) == 'string'){
/*
 * 将传过来的值 如:"file1,file2,file3" 转换为:['file1','file2','file3']  
 */
var s = fileElementId.split(",");
for(var i in s){
	t = t +  "'"+s[i]+"'"+",";
}
t = "["+t+"]";  
t = t.replace(",]", "]")
}  
fileElementId= eval('('+ t +')'); //将string类型转换为Object类型

效果如图:

除了以上代码其它如struts配置,Action无需改动

项目源代码下载:http://download.csdn.net/detail/itmyhome/7589939



转载请注明出处:http://blog.csdn.net/itmyhome1990/article/details/36433621




版权声明:本文博客原创文章,博客,未经同意,不得转载。




本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4738383.html,如需转载请自行联系原作者


相关文章
|
存储 缓存 关系型数据库
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。本文探讨了常用的 MySQL 查询优化方法,包括索引优化(选择合适的索引字段、复合索引、定期维护索引)、查询语句优化(避免全表扫描、限制返回行数、避免使用不必要的函数)、表结构优化(选择合适的数据类型、分区表、定期清理无用数据)及数据库配置优化(调整缓存大小、优化存储引擎参数)。通过这些方法,可以显著提高 MySQL 的查询性能,为应用程序提供更好的用户体验。
1000 4
|
存储 消息中间件 算法
深入解析OpenStack Cinder:块存储服务详解
本文介绍了OpenStack及其块存储服务Cinder。OpenStack是一个开源云计算管理平台,提供基础设施即服务(IaaS),核心服务包括计算、网络、存储等。Cinder主要用于为虚拟机提供持久性块存储,具备多种功能,如卷操作、备份、快照及与实例的交互等。此外,还详细介绍了Cinder的工作流程、命令行操作及不同存储插件的使用。
1463 8
|
机器学习/深度学习 人工智能 监控
一文读懂deepSpeed:深度学习训练的并行化
DeepSpeed 是由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。通过创新的并行化策略、内存优化技术(如 ZeRO)及混合精度训练,DeepSpeed 显著提升了训练速度并降低了资源需求。它支持多种并行方法,包括数据并行、模型并行和流水线并行,同时与 PyTorch 等主流框架无缝集成,提供了易用的 API 和丰富的文档支持。DeepSpeed 不仅大幅减少了内存占用,还通过自动混合精度训练提高了计算效率,降低了能耗。其开源特性促进了 AI 行业的整体进步,使得更多研究者和开发者能够利用先进优化技术,推动了 AI 在各个领域的广泛应用。
|
机器学习/深度学习 自然语言处理 算法
基于卷积神经网络(CNN)的垃圾邮件过滤方法
传统的垃圾邮件过滤手段如规则匹配常因垃圾邮件的多变而失效。基于深度学习的方法,特别是卷积神经网络(CNN),能自动学习邮件中的复杂特征,有效识别垃圾邮件的新形态。CNN通过特征学习、处理复杂结构、良好的泛化能力和适应性,以及高效处理大数据的能力,显著提升了过滤精度。在文本分类任务中,CNN通过卷积层提取局部特征,池化层减少维度,全连接层进行分类,特别适合捕捉文本的局部模式和顺序信息,从而构建高效的垃圾邮件过滤系统。
834 0
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
1075 0
视频弹幕设计网站10-----弹幕列表信息获取
视频弹幕设计网站10-----弹幕列表信息获取
视频弹幕设计网站10-----弹幕列表信息获取
|
API 调度
FreeRTOS学习笔记—任务创建和删除
本文学习了如何创建和删除任务。最后,分析解决了遇到的问题。
400 0
|
传感器 人工智能 物联网
未来科技的趋势与挑战
【2月更文挑战第5天】 随着科技的迅猛发展,我们正处在一个科技蓬勃发展的时代。本文将探讨未来科技的趋势与挑战,涵盖人工智能、区块链、物联网等领域,以及其对社会和个人生活的影响。通过对这些技术的分析和展望,我们可以更好地理解未来科技的走向,并为应对挑战做出准备。
|
C语言
C语言之文字游戏
C语言之文字游戏
响应式和自适应如何区分?
响应式和自适应总是让人分不清,主要原因是,它们在概念上并不是并列关系,而是从属关系。 如果一定要从概念上进行区分: 自适应这个概念范围更广一些,包含:响应式和代码适配。 一个网站采用响应式或者代码适配,都叫做自适应。
213 0

热门文章

最新文章