2010-02-23 43 views
0

下面的代码获取已选择上传的文件列表。通过迭代输入元素为数组赋值

它基本上追加投入要素的表单元素之上的一个div内:

<div id = "files_list"> </div> 

如何存放在阵列中的所有属性的名称 - fileNamesArray - 在点击提交按钮?

尝试我还没有检查,如果这个工程:

//尝试的开始

//我的方法:如果选择上传任何文件 //提醒用户并提交被点击其他

//我不得不通过输入元素进行迭代,并包含在DIV ID =“files_list”,获取所有的文件名和所有的值推到一个数组$ filesArray

//粗略尝试

$("Submit").click(function() { 

    $filesArray 

    $(div#files_list).getElementById('input').each(function($filesArray) { 
     filesArray.push($this.attr("value")) 
    }); 

    while($filesArray.size != 0) { 
     document.writeln("<p>" + $filesArray.pop() + "</p>"); 
    } 
} 
尝试

//结束:我打印出来的名字,只是为了验证

下面的代码:

$(document).ready(function(){ 
var fileMax = 6; 
$('#asdf').after('<div id="files_list" style="border:1px solid #666;padding:5px;background:#fff;" class="normal-gray">Files (maximum '+fileMax+'):</div>'); 
$("input.upload").change(function(){ 
doIt(this, fileMax); 
}); 
}); 

function doIt(obj, fm) { 
if($('input.upload').size() > fm) {alert('Max files is '+fm); obj.value='';return true;} 
$(obj).hide(); 
$(obj).parent().prepend('<input type="file" class="upload" name="fileX[]" />').find("input").change(function() {doIt(this, fm)}); 
var v = obj.value; 
if(v != '') { 
$("div#files_list").append('<div>'+v+'<input type="button" class="remove" value="Delete" style="margin:5px;" class="text-field"/></div>') 
.find("input").click(function(){ 
$(this).parent().remove(); 
$(obj).remove(); 


return true; 
}); 
} 
}; 

代码的HTML表单:

<td><form action="test.php" method="post" enctype="multipart/form-data" name="asdf" id="asdf"> 
     <div id="mUpload"> 
    <table border="0" cellspacing="0" cellpadding="8"> 
     <tr> 
     <td><input type="file" id="element_input" class="upload" name="fileX[]" /></td> 
     </tr> 
     <tr> 
     <td><label> 
      <textarea name="textarea" cols="65" rows="4" class="text-field" id="textarea">Add a description</textarea> 
     </label></td> 
     </tr> 
     <tr> 
     <td><input name="Submit" type="button" class="text-field" id="send" value="Submit" /></td> 
     </tr> 
     </table><br /> 
     </div> 
</form> 

    <p class="normal"></td> 

回答

1
var my_array = new Array(); 

$('#asdf').bind('submit', function() { 
    $.each(this.elements, function() { 
     if (this.type == 'file') { 
      $('#file_list').append($(this).clone()); 
      my_array.push(this.value); 
     } 
    }); 

    for (var i=0; i < my_array.length; i++) 
     alert(my_array[i]); 
}); 

在这里,你去!

编辑由于OP的评论而更新。

+0

谢谢,但我试图找出你的解决方案,我有一些快速的问题 我意识到评估this.type ==“文件”将评估属性类型=“文件”的元素为true。 但是保存对文件名引用的数组的名称是什么。我无法理解你将输入元素的值赋给fileNames数组,在if块之后? 简单地说,我将如何在解决方案的最终“fileNames”数组中打印出“文件名”元素?欢呼声 然后你将如何打印数组中的值? – Terman

+0

根据您的需求更新了帖子。干杯。 – aefxx