描述如下:
网易邮箱写信时,点击“添加附件”,可弹出一个选择文件的框框来,选择文件后就可以将文件名称显示在页面中。很明显,“添加附件”是个href连接来的,点击这个连接,触发它的onlick事件,就弹出这个框框了。不明白的地方是:动态生成一个file页面组件容易,但是,点击href时,是如何出发这个file的conlick事件,而使它弹出一个选择文件的框框来。而且还是支持跨浏览器的,在FF和IE上都可以用虚心请教各位高人,请指教,谢谢。
网易邮箱写信时,点击“添加附件”,可弹出一个选择文件的框框来,选择文件后就可以将文件名称显示在页面中。很明显,“添加附件”是个href连接来的,点击这个连接,触发它的onlick事件,就弹出这个框框了。不明白的地方是:动态生成一个file页面组件容易,但是,点击href时,是如何出发这个file的conlick事件,而使它弹出一个选择文件的框框来。而且还是支持跨浏览器的,在FF和IE上都可以用虚心请教各位高人,请指教,谢谢。
<head>
<title>Untitled</title>
</head>
<script>
function fGoTo(){
document.getElementById("test").click();
}
</script>
<body>
<a href="javascript:fGoTo()">open file dialog</s>
<input type="file" name="test" id="test" style="display:none"></body>
</html>
HTMLElement.prototype.click = function() {
var evt = this.ownerDocument.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
this.dispatchEvent(evt);
}
A标签可以,但对<input type=file>还不行
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title></title>
<style type="text/css">
.body {font-size: 12px;}
a.addfile{width:70px;height:20px;position:relative;cursor:hand;top:0px;font-size: 12px;}
input.addfile{width:0px;height:18px;cursor:hand;position:absolute;top:0px;left:-10px;left:-10px;opacity:0;filter:alpha(opacity=0)}
}
</style>
</head>
<body>
<a class="addfile">选择文件<input class="addfile" type="file" name="file1" size="1"/>
</a>
</body>
</html>不用我说了吧,自己看效果。其实是个障眼法来的,哈
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" title="点击选择附件">
</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>
看这个
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
function openfile(index)
{
document.getElementById("file_"+index).click();
document.getElementById("filetext_"+index).value=document.getElementById("file_"+index).value;
} function CreateNewFile()
{
var tab=document.getElementById("tabfile");
var row=tab.insertRow();
var cell1=row.insertCell();
var len=tab.rows.length;
cell1.innerHTML='<input type="text" id="filetext_'+len+1+'" width="400px">';
var cell2=row.insertCell();
cell2.innerHTML='<a href="javascript:openfile('+len+1+');" >选择文件</a><input type="file" style="display:none" id="file_'+len+1+'">';
}
</script>
</HEAD><BODY>
<input type="button" onclick="CreateNewFile();" value="新建">
<table width=100% id="tabfile">
<tr>
<td><input type="text" id="filetext_1" width="400px"></td>
<td><a href="javascript:openfile(1);" >选择文件</a><input type="file" style="display:none" id="file_1"></td>
</tr>
</table>
</BODY>
</HTML>