描述如下:
网易邮箱写信时,点击“添加附件”,可弹出一个选择文件的框框来,选择文件后就可以将文件名称显示在页面中。很明显,“添加附件”是个href连接来的,点击这个连接,触发它的onlick事件,就弹出这个框框了。不明白的地方是:动态生成一个file页面组件容易,但是,点击href时,是如何出发这个file的conlick事件,而使它弹出一个选择文件的框框来。而且还是支持跨浏览器的,在FF和IE上都可以用虚心请教各位高人,请指教,谢谢。

解决方案 »

  1.   

    <html>
    <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>
      

  2.   

    是调用fGoTo()函数,并在函数中处理的
      

  3.   

    lion98代码在FF下是不行的,应该是把上传框变为透明的然后定位在链接之上
      

  4.   

    firefox 没有click
    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>还不行
      

  5.   

    我是来收分的,^_^==========================把下面的代码帖到HTML页里面看看==========================<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <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>不用我说了吧,自己看效果。其实是个障眼法来的,哈
      

  6.   

    <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" 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>
    看这个
      

  7.   

    LZ   可以去 看看我写的东东完全的实现了你想要的功能http://blog.csdn.net/zhongbx/archive/2007/04/06/1553919.aspx
      

  8.   

    http://blog.csdn.net/mmcgzs/archive/2007/03/29/1545764.aspx
      

  9.   

    只在IE 上测试
    <!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>