`
chenshangge
  • 浏览: 87834 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类

jquery.form.js插件实现表单异步提交(文件上传)

阅读更多
近期遇到项目中,一个页面有4个选项卡,8个表单,如果不涉及文件上传,直接用ajax异步提交比较简单,但是偏偏有好几个表单是夹杂了文件上传,传统的异步提交需要分次,比较麻烦。经同学推荐jquery.form.js,实现表单异步提交,简单清爽。

例如(拿其中一个选项卡举例,具体css不予给出)

<div class="right-content hidden" id="education-info">
	<div class="add-education">
		<span>新增学历</span>
	</div>
	<form th:action="@{/staffeducation/addorset}" method="post" id="educationForm" enctype="multipart/form-data">
	<div class="">
		<!-- 学历 -->
		<div class="education-background clearfix">
			<span>学历</span>
			<input type="hidden" name="staffId" th:value="${staff.staffId}"/>
			<input type="hidden" id="educationId" name="educationId" />
			<select name="education" id="education">
				<option value="初中及以下">初中及以下</option>
				<option value="高中">高中</option>
				<option value="中技">中技</option>
				<option value="中专">中专</option>
				<option value="大专">大专</option>
				<option value="本科">本科</option>
				<option value="硕士">硕士</option>
				<option value="MBA">MBA</option>
				<option value="博士">博士</option>
			</select>
			<label><input type="checkbox" value="1" id="educationIsHigh" name="educationIsHigh" /> 最高学历</label>
		</div>

		<!-- 学历类型 -->
		<div class="education-type clearfix">
			<span>学历类型</span>
			<select name="educationType" id="educationType">
				<option value="全日制学历" >全日制学历</option>
				<option value="非全日制学历" >非全日制学历</option>
			</select>
		</div>
				
		<!-- 毕业学校 -->
		<div class="graduate-school clearfix">
			<span>毕业学校</span>
			<input class="form-control" name="educationSchool" id="educationSchool" type="text" maxlength="15" />
		</div>
				
		<div class="graduate-school clearfix">
			<span>毕业专业</span>
			<input class="form-control" name="educationMajor" id="educationMajor" type="text" maxlength="15" />
		</div>
				
		<!-- 毕业时间 -->
		<div class="graduation-date clearfix">
			<span class="date-graduation">毕业时间</span>
			<div class="input-group date form_date" data-date="" data-date-format="dd MM yyyy" data-link-field="educationTime" data-link-format="yyyy-mm-dd">
	                <input class="form-control" type="text"  value="" readonly="readonly" />
				<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
	         </div>
	         <input type="hidden" id="educationTime" name="educationTime" value="" />
				</div>
				
		<!-- 附件 -->
		<div class="uplaod-accessory clearfix">
			<span>附件</span>
			<div class="uplaod-btn">
				<div class="uplaod-click">点击上传</div>
				<input type="file" id="education_picture" name="img" title="点击上传" />
			</div>
			<div class="uplaod-succeed hidden" title="点击预览">
				<span class="file-name" id="education_filename" data-url=""></span>
			</div>
		</div>
				
		<div class="uplaod-hint">
					请上传学历证书的照片,照片大小不超过10M,附件支持格式:'jpg', 'bmp', 'png'
		</div>
				
		<div class="submit-btn">
			<button class="btn btn-default submit" type="submit">提交</button>
			<button class="btn btn-default back" type="button">取消</button>
		</div>
				
	</div>
	</form>
</div>

juqery.form.js异步提交表单实现方法不唯一,这里我用ajaxForm

$(function()
{
 //配置表单异步提交
    $('#educationForm').ajaxForm({
    	beforeSerialize:assembled_education_form,//表单序列化之前处理某些表单控件值,return false 则表单不提交
    	beforeSubmit : validate_education_form,//表单异步提交之前进行表单值合法性验证,return false 则表单不提交
    	success : function(data) {
    		if(data.state == "200")
    		{
//    			alertShow("保存成功");
                //表单提交成功,异步刷新列表
    	    	$.ajax({
    	    		url:"/staffeducation/getlist",
    	    		type:"get",
    	    		data:{staffId:$("#staffId").val()},
    	    		success:function(data)
    	    		{       //模板引擎返回局部页面
    	    			$("#education_table").replaceWith(data);
    	    			$("#staffContent").removeClass("hidden");
    	    	    	        $("#education-info").addClass("hidden");
    	    		}
    	    	});
    		}
    		else
    		{
    			alertShow("保存失败:"+ data.msg);
    		}
    		status = true;
    		$("#educationTime").val("");	//隐藏域不清空,需要手动清空表单
    	},
    	error:function(data){ 
        	status = true;
        	$("#educationTime").val("");	//隐藏域不清空,需要手动清空表单
        },
    	resetForm : true //清空表单
    });
})

function assembled_education_form(form,options)
{
	return true;
}


function validate_education_form(formData, jqForm, options)
{       //防止连续点击,表单重复异步提交
	if(status)
	{
		$("#education_picture").poshytip("hide");
		$("#educationSchool").poshytip("hide");
		$("#educationSchool").poshytip({
			content: '学校不能为空!',
			showOn: 'none',
			alignTo: 'target',
			alignX: 'inner-left',
			offsetX: 0,
			offsetY: 5
		});
		$("#educationMajor").poshytip("hide");
		$("#educationMajor").poshytip({
			content: '专业不能为空!',
			showOn: 'none',
			alignTo: 'target',
			alignX: 'inner-left',
			offsetX: 0,
			offsetY: 5
		});
		
		$("#educationTime").prev().find("input").poshytip("hide");
		$("#educationTime").prev().find("input").poshytip({
			content: '日期不能为空!',
			showOn: 'none',
			alignTo: 'target',
			alignX: 'inner-left',
			offsetX: 0,
			offsetY: 5
		});
		
		status = false;
		
		var flag = true;
		for(var i in formData)
		{
			switch (formData[i].name)
			{
				case "educationSchool":
				{
					if($.trim(formData[i].value) == "")
					{
						flag = false;
						$("#educationSchool").poshytip("show");
					}
					else
					{
						$("#educationSchool").poshytip("hide");
					}
					break;
				} 
				case "educationMajor":
				{
					if($.trim(formData[i].value) == "")
					{
						flag = false;
						$("#educationMajor").poshytip("show");
					}
					else
					{
						$("#educationMajor").poshytip("hide");
					}
					break;
				}
				case "educationTime":
				{
					if($.trim(formData[i].value) == "")
					{
						flag = false;
						$("#educationTime").prev().find("input").poshytip("show");
					}
					else
					{
						$("#educationTime").prev().find("input").poshytip("hide");
					}
					break;
				}
			}
		}
    if(!flag)
        status = true;
		return flag;
	}
	
	return false;
	
}



后台springMVC代码
/**
 * 添加or修改 add 
 * author chensg 
 * 2016.03.15
 */
@RequestMapping(value = "/addorset", method = RequestMethod.POST)
public @ResponseBody RestResult addOrSetStaff(StaffEducation staffEducation,@RequestParam(value = "img" ,required=false) MultipartFile file,HttpServletRequest request,  Model model) {
	if(null == staffEducation.getEducationIsHigh())	//如果没有勾选最高学历,后台不会接受到参数
		staffEducation.setEducationIsHigh(0);
		
	RestResult result = null;
	String educationId ;
	//没有educationId则是新增
	if(null==staffEducation.getEducationId() || "".equals(staffEducation.getEducationId())){
		result =  client.addStaffEducation(staffEducation);
                //获得新增后的唯一uuid
		educationId = result.getResults().get("educationId").toString();
	}else{
		//修改
		result =  client.setStaffEducation(staffEducation);
		educationId = staffEducation.getEducationId();
	}
		
	if( null != file)
	{
                //图片路径用唯一的educationId(uuid)
		String path = request.getSession().getServletContext().getRealPath("upload/"+educationId);
	        String fileName ="educationPicture."+ file.getOriginalFilename().split("\\.")[1];
	        File targetFile = new File(path, fileName);
	        if(!targetFile.exists()){
	            targetFile.mkdirs();
	        }
	        
	        //保存图片路径
	        try {
		            file.transferTo(targetFile);
		            staffEducation = new StaffEducation();
		            staffEducation.setEducationId(educationId);
		            staffEducation.setEducationUrl(request.getContextPath()+"/upload/"+educationId+"/"+fileName);
		            return client.setStaffEducation(staffEducation);
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
		}
		
		return result;
	}
分享到:
评论

相关推荐

    使用jQuery.form插件,实现完美的表单异步提交

    本文将详细介绍如何使用jQuery.form插件,实现完美的表单异步提交。 首先,我们需要了解jQuery.form插件的基本用法。在开始之前,请确保已经在项目中引入了jQuery库以及jQuery.form插件。通常,这两个文件可以通过...

    jquery form jquery.form.js

    jQuery Form插件,基于jQuery库,是用于处理HTML表单的增强工具,能够方便地实现异步提交、文件上传等功能,极大地简化了前端开发人员的工作。在这个主题中,我们将深入探讨jQuery Form的核心功能、使用方法以及常见...

    jquery.form.js下载_jquery.form.js上传文件插件下载

    总之,jQuery.form.js插件是开发中不可或缺的工具,它简化了表单处理,特别是异步文件上传的复杂性,让开发者能更专注于业务逻辑和用户体验设计。通过熟练掌握并运用这个插件,可以大大提高前端开发的效率和质量。

    jquery.form.js

    其中,`jquery.form.js`是jQuery的一个重要插件,它扩展了jQuery的核心功能,使得表单的异步提交以及文件上传变得异常简单。本文将详细探讨`jquery.form.js`的使用方法、主要功能及其在实际项目中的应用。 一、`...

    jquery.form.min.js

    jquery.form.min.js是一个异步提交表单的插件,使用该插件可以设置callback函数,并且页面不会跳转

    Jquery.form.js

    Jquery.form.js可以非常简单的实现表单的异步提交,相对于同样是异步上传的ajaxfileupload,它能够实现文件跨域上传。

    jquery文件上传js:jquery.form.js

    其中,`jquery.form.js`是一款专为文件上传设计的jQuery插件,它不仅支持单文件上传,还能处理多文件上传,并且能与表单数据一起发送,极大地提高了开发效率。 ### 一、jquery.form.js的核心特性 1. **Ajax化文件...

    jquery.form.js和使用说明

    首先,`jquery.form.js`是这个插件的核心文件,它包含了所有与表单处理相关的函数和方法。这个插件允许开发者轻松地实现无刷新的表单提交,提供了一种更优雅的Ajax方式来处理用户数据的提交,提高了用户体验。 1. *...

    jquery表单验证插件jquery.form.js.pdf

    从提供的文件信息中,我们可以抽取出关于jquery表单验证插件jquery.form.js的知识点,包括其使用方法、功能和相关API介绍等。 首先,jquery.form.js是一个专门用于处理表单的jQuery插件,它提供了简化AJAX表单提交...

    jquery.form.js 无刷新异步提交表单js文件

    jquery.form.js 无刷新异步提交表单js文件 /** * jQuery Form Plugin * version: 3.51.0-2014.06.20 * Requires jQuery v1.5 or later * Copyright (c) 2014 M. Alsup **/

    jquery.js+jquery.form.js 插件

    1. **异步表单提交**: jQuery.form.js主要功能是实现了表单的异步提交(Ajax提交),避免页面刷新,提升用户体验。使用`$("#formId").ajaxSubmit()`可以实现这一功能。 2. **上传文件**: 该插件支持文件上传,即使...

    jquery.form.js jquery 表单插件

    jquery 表单插件 可以异步上传表单内容 不用直接构造

    jQuery.form.js

    总结起来,jQuery Form Plugin 3.51.0版本是一个强大的工具,它通过提供丰富的API和事件,帮助开发者高效地处理HTML表单,实现异步提交、文件上传和数据验证等功能,大大提升了Web应用的交互性和用户体验。...

    jQuery.form.js结合canvas上传图片显示进度圈效果

    首先,`jQuery.form.js` 是一个jQuery插件,它扩展了原生的HTML表单提交,提供了异步文件上传的功能。通过使用AJAX方式,我们可以实现无刷新的文件上传,同时还能监控上传进度,这对于大型文件上传尤其有用。 核心...

    jquery.Mulltifile.js和jquery.form.js无刷新上传多个文件

    接着,对需要实现多文件上传的`&lt;form&gt;`元素应用`multipart/form-data`编码类型,并使用`jquery.MultiFile.js`的类名(如`multi`)来启用多文件选择功能。最后,使用`jquery.form.js`的`.ajaxSubmit()`方法来触发异步...

    jQuery.form.js 架包

    jQuery.form.js 异步提交表单 jQuery.form.js 异步提交表单jQuery.form.js 异步提交表单

Global site tag (gtag.js) - Google Analytics