读书人

共享-完美的多附件上传效果。该怎么解

发布时间: 2012-02-17 17:50:42 作者: rapoo

共享-----完美的多附件上传效果。
一下的代码是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的啦,接分呀,希望可以一起讨论讨论

读书人网 >JavaScript

热点推荐