jQuery:模拟点击<input type ="file"/>在Firefox中不起作用?

kri*_*ian 30 html javascript jquery file-upload

可能重复:
在JavaScript中我可以以编程方式为文件输入元素触发"click"事件吗?

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

<html>
    <head>
        <title>File Upload Click Test</title>
        <script type="text/javascript" src="http://ajax.googleapis.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>
Run Code Online (Sandbox Code Playgroud)

我的目标是让div文件输入上引发点击事件,这似乎与我在IE和Chrome中所期望的完全一样,但在Firefox中不起作用(当你点击时没有打开文件浏览器div).

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

bob*_*nce 34

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

不,它在IE的大多数常见版本中也不起作用.IE将打开对话框,但是一旦你选择了一个文件,表单就不会真正提交.

抛弃希望.伪造文件上传框的唯一方法是使用透明技术,这根本不推荐,因为浏览器可能在内部以不同方式布置文件上传框(甚至提供不包含浏览对话框的文件上传控件),极有可能你最终得到一个无法操作的形式.

学会喜欢灰色文件上传字段,或使用渐进增强功能将其替换为可用的Flash.

  • 抛弃希望.校验. (44认同)
  • 它现在在Firefox 4中运行. (7认同)

Des*_*nya 22

这是解决方法(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="" />
Run Code Online (Sandbox Code Playgroud)

输入文件类型的CSS:

.file-upload { display:none; }
Run Code Online (Sandbox Code Playgroud)

jQuery位:

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

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

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

  • 我把它拿回来,看起来就像那么简单.但是在控制台中尝试它时它不起作用.当我将代码放在我的文档中时,它似乎工作得很好.DERP. (2认同)