问题描述

Possible Duplicate:
In JavaScript can I make a 「click」 event fire programmatically for a file input element?

我有一个看起来像这样的网页

<html>
    <head>
        <title>File Upload Click Test</title>
        <script type="text/javascript" src="http://googleajax.admincdn.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
    <body>
        <div onclick="$('input[type=file]').click()" >CLICK SIMULATOR</div>
        <input type="file"></input>
    </body>
</html>

我的目标是让 div 在文件输入中提出点击事件,这似乎与 IE 和 Chrome 中的预期一样,但在 Firefox 中不起作用 (当您点击文件浏览器时,不会打开文件浏览器 DIV) 。

有没有办法让这个工作在 FF?

最佳解决办法

Is there a way to get this working in FF?

不,也可以在大多数常见版本的 IE 中运行。 IE 将打开该对话框,但一旦您选择了一个文件,表单将不会实际提交。

放弃希望伪造文件上传框的唯一方法是使用透明度技术,因为浏览器可能会在内部设置不同的文件上传框 (甚至提供不包括浏览对话框的文件上传控件),这是真的不推荐的,因此很可能最终会导致无法使用的形式。

学习爱上灰色文件上传字段,或使用渐进增强功能将其替换为可用的 Flash 。

次佳解决办法

以下是解决方法 (FF) 。 HTML 位:

<label>Upload Business Logo</label>
<input type="file" name="logo" id="logo" class="file-upload" />
<input type="text" id="text-logo" class="text-upload" readonly/>
<input type="button" id="btn-logo" class="btn-upload" alt="" />

CSS 的输入文件类型:

.file-upload { display:none; }

jQuery 位:

//bind click
$('#btn-logo').click(function(event) {
  $('#logo').click();
});

//capture selected filename
$('#logo').change(function(click) {
  $('#text-logo').val(this.value);
});

表单提交后,隐藏的输入文件将上传文件。希望这可以帮助 :)

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛