1

我试图重新创建 gmail 的文件上传功能——而不是使用默认的文件输入类型——我隐藏了该元素并使用 href 来模拟点击默认控件。

这部分我在所有浏览器中都工作过,但我使用文件控件的 onchange 句柄来启动文件上传(提交临时表单/将结果发布到 iframe)。问题是在选择文件后,控件在 IE 中显示为空白,但在 FF 和 Chrome 中工作正常。我只需要支持 IE 8+。

最后一个棘手的问题 - 这发生在现有表单中,因此我使用 jQuery 将表单附加到文档的底部。

<a id ="upper">Upload</a>

触发这个 jQuery

$("#upper").click(function() {
  $('#dynamic_files').click();
});

动态添加表单

      $().ready(function() {
            $('body').append('<form id="my_form" name="upload" action="/fil/upload"       
method="POST" enctype="multipart/form-data" target="my_iframe">
<iframe id="my_iframe" name="my_iframe" src="" style="display:block;"></iframe>  
<input type="file" name="files[resource_file]" id="dynamic_files"  
onChange="this.form.submit();" /></form>');
       });

还想指出,在 IE 中,如果我单击默认文件选择器控件而不是我的“快捷方式”链接,则此代码有效

4

1 回答 1

0

这是 IE 8 的限制。Gmail 使用 flash 来绕过使用文件输入控件。您可以伪造它的一种方法是将控件的不透明度设置为 0 并将其覆盖在您的按钮上,如本示例所示:

http://www.quirksmode.org/dom/inputfile.html

还有一堆预先构建的解决方案可以从你那里抽象出来。我过去使用的一个是 PLUpload:

http://www.plupload.com/

于 2012-09-06T19:23:27.933 回答