ajaxFileUpload onchang第二次失效

8 篇文章 0 订阅
3 篇文章 0 订阅

ajaxFileUpload 用onchang上传只能上传一次 第二次就失效了 我找这个问题找了很长时间,试了很多种方法都不行,皇天不负有心人 终于被我找到解决办法了。


<form action="" id="form1" method="post" enctype="multipart/form-data">
	<input type="hidden" id="openid" name="openid" value="${openid}" />
	<input type="hidden" id="id" name="id" value="${id}" />
	<input type="hidden" id="clmno" name="clmno" value="${clmno}" />
	<input type="hidden" id="updtype" name="updtype" value="01" />
	<div class="page-content">
		<div class="top"><a href="#" class="but">上传资料</a></div>
		<br/>
		<section class="trial">
	        <header><span>理赔申请书</span></header>
        	<div class="file" id="div_file_01">
	        	<input type="file" id="multiFiles01" name="multiFiles"/>
				<img class="src" src="../images/upload/add.jpg" width="100" height="100"/>
        	</div>
		</section>
	</div>
</form>

/*监听所有file下的input的事件 最原始方法 只能上传一次*/
	$(".file input").chang(function(){
		console.log(this.id);
		var file = this.files;
		if(file.length==0){
			$("#msgAlert").html("请选择一张图片");
			$("#alertMsg").show();
		}else{
			for(var i = 0; i < file.length; i++) {
				readAsDataURL(file[i],$(this).parent(),this.id);
			}
		}
	});


/*监听所有file下的input的事件   这是我修改之后的,可上传多次*/
	$(".file input").live("change",function(){//
		console.log(this.id);
		var file = this.files;
		if(file.length==0){
			$("#msgAlert").html("请选择一张图片");
			$("#alertMsg").show();
		}else{
			for(var i = 0; i < file.length; i++) {
				readAsDataURL(file[i],$(this).parent(),this.id);
			}
		}
	});

$.ajaxFileUpload({
        url:"${ctx}claim/uploadImgFile.action?"+str,//需要链接到服务器地址  
        secureuri:false,  
        fileElementId:id,
        dataType: 'json', 
        success: function (data, status){
        	var flag = data.model.success;
        	if(flag==true){
        		var reader = new FileReader();
        		reader.readAsDataURL(file);
        		reader.onload = function(e) {
        			var idtime = new Date().getTime();
        			var divId = "divId_"+idtime;
        			var tt = '<div class="view" id="'+divId+'" ><img class="view_img" src="' + this.result + '"/>'
        			+'<a href="#" οnclick=\'deleteImg("'+divId+'")\'>删除</a></div>';
        			$(par).before(tt);
        			//重的一步,如果没有这一步 onchang事件只能一次
        			$("#"+id).replaceWith('<input type="file" id="multiFiles01" name="multiFiles"/>');
        		}; 
        	}
        },error: function (data, status, e){//相当于java中catch语句块的用法  
        	$("#msgAlert").html("上传失败,请重新上传!");
        	$("#alertMsg").show();
        }  
    });


ajaxfileupload.js可以兼容IE8以下版本实现无刷新的Form提交,上传文件。 这个版本修改了提交后台失败的几个bug 使用是需注意以下几: 1.调用createUploadForm,此方法中增加了change参数,此参数用户给新生成的input-file元素绑定change事件,如果不需要可以不加此参数。 2.要上传的input-file元素,建议放id和name属性,而且这两个属性值要保持一致 3.后台代码中,response里的contenttype要设置为"text/html",前台的success回调中对返回值作处理 例子如下: js: $.ajaxFileUpload({ url: url, type: 'post', data: data, secureuri: false, fileElementId: fileId, // input-file的id、name属性名 dataType: 'JSON', beforeSend: function (XMLHttpRequest) { //show loading... }, success: function (data, status) { data = jQuery.parseJSON(data); success(data); }, error: function (data, status, e) { error(e); }, complete: function (XMLHttpRequest, textStatus) { //hide loading... }, change: change //需要绑定到动态生成的input-file元素上的change事件处理方法;没有的话,这个参数可以不写 }); 如果加了change,change方法中需要处理一下,因为发现会被调2次 function Upload(event) { var fileid = $(event.target).attr('id'); if(isNullOrEmpty(fileid) || /^jUploadFile\d+$/.test(fileid))return; //注意:此处过滤无效调用 //... } 后台代码(ashx): public void ProcessRequest(HttpContext context) { try { context.Response.ContentType = "text/html"; var request = context.Request; var param1 = request.Params["param1"]; //取参数 //取上传文件 if (request.Files == null || request.Files.Count <= 0) throw new ApplicationException("no file to be uploaded!"); var file = request.Files[0]; var filename = System.IO.Path.GetFileName(file.FileName); var serverpath = Path.Combine(context.Server.MapPath(ROOT), filename); file.SaveAs(serverpath); //自定义返回Json字符串 var json = '{' + string.Format(json, id, finfo.Name, extension, path) + '}'; response.Write(json); return; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值