输入类型=“文件”样式帮助

时间:2011-02-14 01:47:23

标签: javascript internet-explorer file input

我有一个文件输入字段opacity: 0;filter: alpha(opacity: 0);位于一个大div的顶部,我用它作为按钮来选择文件,所选文件名显示在按钮下方。

一切正常,但是当你在IE中设置文件元素的width属性(在这种情况下,它下面的DIV的宽度)时,该宽度的一部分是文本区域的文件输入。当然,IE做了他们自己的事情,并且与其他浏览器不同,必须双击元素的文本区域才能打开浏览对话框。 Firefox& Safari只需单击元素的文本部分即可执行操作。我以为我有一个解决方法,因为IE允许你在元素上调用.click()事件。

我试过了:

<input type="file" onclick="this.click();" />

什么也没做,所以我尝试了这个:

<input type="file" onmouseup="this.click();" />

哪个有效,只需单击元素的文本区域即可显示浏览对话框。但是,由于某些原因提交表单时,如果选择了某个文件,表单将无法提交,则不会发生任何事情。如果未选择任何文件,则表单的其余部分将被提交。

所以现在我回到原点,我的选择文件按钮的左半部分必须双击才能选择一个文件,而右半部分可以单击。我想不出任何其他方式让IE对单击元素做出反应。我尝试使用onfocus事件来触发元素上的.click(),这有效,但由于此上传对话框将是页面上唯一的内容,<input type="file" />是第一个输入正在呈现的元素,在页面加载时触发click事件。

然后我尝试附加到正文的onload事件,并将焦点设置为其他内容,但这已经太晚了,已经将焦点放在文件输入和已打开的浏览对话框中。我知道我正在接近onfocus,有没有办法在页面加载时保持元素不被聚焦?或者还有其他方法可以做到这一点,任何人都可以想到吗?

谢谢!

[更新]

我再次尝试使用onfocus,不幸的是,我错了,在提交表单时再次调用文件元素,停止提交并再次打开浏览对话框

1 个答案:

答案 0 :(得分:-1)

我最喜欢的格式化html输入的解决方案:http://pixelmatrixdesign.com/uniform/