共享-----完美的多附件上传效果。
一下的代码是51js上找的一段代码
结合 patchclass(黑翼) 提供的163上的效果实现的。
供大家研究。
<html>
<head>
<style>
a.addfile {
background-image:url(http://p.mail.163.com/js31style/lib/0703131650/163blue/f1.gif);
background-repeat:no-repeat;
background-position:-823px -17px;
display:block;
float:left;
height:20px;
margin-top:-1px;
position:relative;
text-decoration:none;
top:0pt;
width:80px;
}
input.addfile {
/*left:-18px;*/
}
input.addfile {
cursor:pointer !important;
height:18px;
left:-13px;
filter:alpha(opacity=0);
position:absolute;
top:5px;
width:1px;
z-index: -1;
}
</style>
<script type= "text/javascript ">
function MultiSelector( list_target, max ){
// Where to write the list
this.list_target = list_target;
// How many elements?
this.count = 0;
// How many elements?
this.id = 0;
// Is there a maximum?
if( max ){
this.max = max;
} else {
this.max = -1;
};
/**
* Add a new file input element
*/
this.addElement = function( element ){
// Make sure it 's a file input element
if( element.tagName == 'INPUT ' && element.type == 'file ' ){
// Element name -- what number am I?
element.name = 'file_ ' + this.id++;
// Add reference to this object
element.multi_selector = this;
// What to do when a file is selected
element.onchange = function(){
// New file input
var new_element = document.createElement( 'input ' );
new_element.type = 'file ';
new_element.size = 1;
new_element.className = "addfile ";
// Add new element
this.parentNode.insertBefore( new_element, this );
// Apply 'update ' to element
this.multi_selector.addElement( new_element );
// Update list
this.multi_selector.addListRow( this );
// Hide this: we can 't use display:none because Safari doesn 't like it
this.style.position = 'absolute ';
this.style.left = '-1000px ';
};
// If we 've reached maximum number, disable input element
if( this.max != -1 && this.count > = this.max ){
element.disabled = true;
};
// File element counter
this.count++;
// Most recent element
this.current_element = element;
} else {
// This can only be applied to file input elements!
alert( 'Error: not a file input element ' );
};
};
/**
* Add a new row to the list of files
*/
this.addListRow = function( element ){
// Row div
var new_row = document.createElement( 'div ' );
// Delete button
var new_row_button = document.createElement( 'input ' );
new_row_button.type = 'button ';
new_row_button.value = 'Delete ';
// References
new_row.element = element;
// Delete function
new_row_button.onclick= function(){
// Remove element from form
this.parentNode.element.parentNode.removeChild( this.parentNode.element );
// Remove this row from the list
this.parentNode.parentNode.removeChild( this.parentNode );
// Decrement counter
this.parentNode.element.multi_selector.count--;
// Re-enable input element (if it 's disabled)
this.parentNode.element.multi_selector.current_element.disabled = false;
// Appease Safari
// without it Safari wants to reload the browser window
// which nixes your already queued uploads
return false;
};
// Set row value
new_row.innerHTML = element.value;
// Add button
new_row.appendChild( new_row_button );
// Add it to the list
this.list_target.appendChild( new_row );
};
};
</script>
</head>
<body>
<!-- This is the form -->
<form enctype= "multipart/form-data " action= "your_script_here.script " method = "post ">
<!-- The file element -- NOTE: it has an ID -->
<a href=#? class= "addfile ">
<input id= "my_file_element " class= "addfile " type= "file " name= "file_1 " size= "1 ">
</a>
<input type= "submit " value=上传>
</form>
Files:
<!-- This is where the output will appear -->
<div id= "files_list " style= "padding:5px;border:1px;border-style:solid;border-color:#0000ff;height:100px;width:600px; "> </div>
<script>
<!-- Create an instance of the multiSelector class, pass it the output target and the max number of files -->
var multi_selector = new MultiSelector( document.getElementById( 'files_list ' ), 100 );
<!-- Pass in the file element -->
multi_selector.addElement( document.getElementById( 'my_file_element ' ) );
</script>
</body>
</html>
[解决办法]
mark
[解决办法]
mark
[解决办法]
mark
[解决办法]
支持下楼主
[解决办法]
mark
[解决办法]
接分来的...
[解决办法]
<script language= "javascript ">
var vmFile
//动态文件记数器
var num=0;
var maxNum = 3;
var filename=new Array();
function file_onchange() {
function file_onchange() {
if(checkFileNum()){
alert( "最大上传文件数为 "+maxNum);
return ;
}
//先+file控件
addFile();
}
//获取层内容
function setdiv(){
var obj=document.getElementById( "showFile ");
var returnStr= " ";
for(var i=0;i <filename.length;i++){
alert( "filenames=== "+filename[i]);
var addStr=filename[i]+ " <a href= 'javascript:DelFile( "+i+ ") '> <img src= 'image/attach.gif ' alt= '删除 ' /> </a> "+ "; ";
returnStr=returnStr+addStr ;
}
obj.innerHTML=returnStr;
}
//增加file控件
function addFile(){
vmFile = document.getElementById( "mFileLink ");
var eF
objStr = "input "
eF=document.createElement(objStr)
eF.className = "addfile "
eF.type= "file "
eF.name= "uploadFiles "+num
eF.size =1
eF.onchange = file_onchange;
vmFile.appendChild(eF) ;
num++;
var mName = new Array();
alert( "vmFile.childNodes.length= "+vmFile.childNodes.length);
var tempVar = vmFile.childNodes[vmFile.childNodes.length-2].value;
alert( "tempVar= "+tempVar);
if ( tempVar != " " ) {
mName=tempVar.split( "\\ ");
}
var currFile =mName[mName.length-1];
alert( "currFile= "+currFile);
//检查是否同名
if(checkAgainFile(currFile)){
vmFile.removeChild(eF);
num--;
alert( "vmFile.childNodes.length= "+vmFile.childNodes.length);
alert( "已经选择了该文件! ");
return;
}else{
alert( "num= "+num);
filename[num-1] = currFile;
}
setdiv();
}
//减去file控件
function DelFile(delnum ){
vmFile = document.getElementById( "mFileLink ");
alert( "bfore vmFile.childNodes.length= "+vmFile.childNodes.length);
vmFile.removeChild(vmFile.childNodes(delnum));
alert( "after vmFile.childNodes.length= "+vmFile.childNodes.length);
num--;
//删除数组文件名
filename.splice( delnum, 1 );
setdiv();
}
function checkAgainFile(infilename ){
var flag =false;
for(var i=0;i <filename.length;i++){
if(filename[i]==infilename)flag = true;
}
return flag;
}
function checkFileNum(){
var flag =false;
if(filename.length> =maxNum ){
flag = true;
}
return flag;
}
</script>
改了下,这次是改对了
[解决办法]
楼主的这个不错,不过如果再加上同名文件验证就比较完善了
[解决办法]
mark
[解决办法]
这近也在做这个,就差一点点可以到163的样子了,先看看LZ的啦,接分呀,希望可以一起讨论讨论