您的位置:首页 > Web前端 > JQuery

jquery ajaxFileupload多文件上传插件内核延伸

2014-04-02 11:27 627 查看
我需要实现多个文件上传,之前的做法是定义多个不同id的input,然后把ajaxfileuplod方法放在for循环里(问题是我需要一次性提交多张图片不是循环上传多张图片,于是这个方法就不能满足实际业务需求了),直接改源码(因为作者好久没有跟新了,也确实满足不了要求了)。接下来看看我是怎么改的。

引用网上的做法:

1,看没有修改前的代码

Js代码


var oldElement = jQuery('#' + fileElementId);

var newElement = jQuery(oldElement).clone();

jQuery(oldElement).attr('id', fileId);

jQuery(oldElement).before(newElement);

jQuery(oldElement).appendTo(form);


很容易看出,这个就是把id为什么的input加到from里去,那么要实现多个文件上传,就改成下面的样子:

Js代码


if(typeof(fileElementId) == 'string'){

fileElementId = [fileElementId];

}

for(var i in fileElementId){

var oldElement = jQuery('#' + fileElementId[i]);

var newElement = jQuery(oldElement).clone();

jQuery(oldElement).attr('id', fileId);

jQuery(oldElement).before(newElement);

jQuery(oldElement).appendTo(form);

}

这样改之后,初始化的代码就要这么写:

Js代码


$.ajaxFileUpload({

url:'/ajax.php',

fileElementId:['id1','id2']//原先是fileElementId:’id’ 只能上传一个

});

到这里,确实可以上传多个文件,但是对于我来说新问题又来,多个id,我的界面的文件不是固定的,是动态加载的,那么id要动态生成,我觉得太麻烦,为什么不取name呢?然后把以上代码改为如下:

Js代码


if(typeof(fileElementId) == 'string'){

fileElementId = [fileElementId];

}

for(var i in fileElementId){

//按name取值

var oldElement = jQuery("input[name="+fileElementId[i]+"]");

oldElement.each(function() {

var newElement = jQuery($(this)).clone();

jQuery(oldElement).attr('id', fileId);

jQuery(oldElement).before(newElement);

jQuery(oldElement).appendTo(form);

});

}

这样改了 那么就可以实现多组多个文件上传,接下来看我是怎么应用的。

html:

Html代码


<div>

<img id="loading" src="scripts/ajaxFileUploader/loading.gif" style="display:none;">



<table cellpadding="0" cellspacing="0" class="tableForm" id="calculation_model">

<thead>

<tr>

<th>多组多个文件</th>

</tr>

</thead>

<tbody>

<tr>

<td>第一组</td>

<td>第二组</td>

</tr>

<tr>

<td><input type="file" name="gridDoc" class="input"></td>

<td><input type="file" name="caseDoc" class="input"></td>

</tr>

</tbody>

<tfoot>

<tr>

<td><button class="button" id="up1">Upload</button></td>

<td><button class="button" id="addInput" >添加一组</button></td>

</tr>

</tfoot>

</table>

</div>

js:

Js代码


/**

* Created with IntelliJ IDEA.

* User: Administrator

* Date: 13-7-3

* Time: 上午9:20

* To change this template use File | Settings | File Templates.

*/

$(document).ready(function () {

$("#up1").click(function(){

var temp = ["gridDoc","caseDoc"];

ajaxFileUpload(temp);

});



$("#addInput").click(function(){

addInputFile();

});



});



//动态添加一组文件

function addInputFile(){

$("#calculation_model").append(" <tr>"+

"<td><input type='file' name='gridDoc' class='input'></td> "+

"<td><input type='file' name='caseDoc' class='input'></td> "+

"</tr>");

}





//直接使用下载下来的文件里的demo代码

function ajaxFileUpload(id)

{

//starting setting some animation when the ajax starts and completes

$("#loading").ajaxStart(function(){

$(this).show();

}).ajaxComplete(function(){

$(this).hide();

});



/*

prepareing ajax file upload

url: the url of script file handling the uploaded files

fileElementId: the file type of input element id and it will be the index of $_FILES Array()

dataType: it support json, xml

secureuri:use secure protocol

success: call back function when the ajax complete

error: callback function when the ajax failed



*/

$.ajaxFileUpload({

url:'upload.action',

//secureuri:false,

fileElementId:id,

dataType: 'json'

}

)



return false;



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: