如果我在某个地方有input type="file"
,并且点击某个链接,它也会触发对文件输入的点击。用户选择一个文件。
在IE8 / 9中,如果用户点击button type="submit"
,则第一次点击会清除文件输入中的所有数据,然后第二次提交一个空白表格。
如何允许提交input type="file"
发布javascript点击触发器。
一些注意事项:
想法?
答案 0 :(得分:5)
我一直在努力解决同样的问题,而且我还没有找到一个干净的解决方案。
然而,我发现了一种解决方法。请注意下面的解决方案完全忽略了最佳实践(以我的拙见),如果有人有更好的,更符合标准的方法,请在此处发布。修复按钮点击事件
经过大量的研究,似乎很多人都在使用一种技巧,他们绝对将<input type="file" />
立即放在按钮上,并将不透明度设置为零。这意味着,对于用户来说,看起来他们正在点击按钮,但浏览器将其视为点击<input type="file" />
(因此避免了IE中提到的问题)。我很惊讶地看到Quirksmode实际上推荐了这种方法。
修复按钮样式
现在,这确实引入了更多的美容问题;您可能会发现按钮不再触发:hover
和:active
CSS伪类(除非您将<input type="file" />
放在按钮内),并且您的鼠标光标可能是默认鼠标光标,尽管您已将任何CSS应用于<input type="file" />
或按钮。
使用JavaScript解决这些类很容易解决(我会留给你),但光标仍然是一个问题。奇怪的是,您可以设置cursor
右侧path
侧<input type="file" \>
的样式,但这不会影响它的Browse
按钮。不幸的是,这个(现在是透明的)按钮可能会超出样式按钮的某些部分,导致悬停时出现默认光标。
为了解决这个问题,我偶然发现了this work-around(JSFiddle here)。基本上,有人将事件绑定到其按钮的mousemove
事件,并且每次将鼠标悬停在按钮上时,将<input type="file" />
的右侧放在鼠标光标下。如果按钮没有固定大小且设置为<input type="file" />
,则可能还需要增强一点,以阻止从按钮的坐标外部点击overflow: hidden
。
<强>结论强>
总的来说,我发现造型<input type="file" />
不值得;如果你真的希望它看起来不错,那么你可能会在某些时候使用JavaScript(如果你试图支持禁用JavaScript的人,那就不好了)。我也不知道这对移动设备有何影响。
如果您要定位支持Html5 File API的较新浏览器,请实施AJAX拖放上传解决方案(here是一个很好的解决方案),并完全摆脱<input type="file" />
。对于那些不支持它的人(较旧的浏览器和禁用了JavaScript的浏览器),只需将没有样式的<input type="file" />
作为后备保留。
答案 1 :(得分:2)
我发现使用jquery fileupload extension会更好。它比我手动操作时更能处理错综复杂的错误。它基本上做了jquery为x-browser dom操作&amp; ajax但输入类型=“文件”。