您的位置:首页 > 其它

以input=file方式,获取文件时,在IE下8无法通过某个按钮click事件间接触发input=file的change事件

2014-09-18 23:15 656 查看
最近在项目中遇到了许多上传问题,公司内部的组件,通过form上传,需要使用input=file触发选择文件,

因为input=file在各个浏览器中显示的样式是不同的,谷歌,火狐,IE都有所不同,而且不太美观,所以为了解决

这一个问题,一开始采用了隐藏input=file 然后通过一个显示的button间接触发input=file的click事件如下

<input type="file" id="upload" style="display:none">

<input type="button" value="上传" onlick="document.getElementById('upload').click()"/>

经过测试在IE9+,谷歌,火狐下均能够正常使用,能够正常上传,但是在IE8下却出现了问题,不管如何选择

都无法触发change事件,经过查询,原来基于安全限制,IE8下将间接触发的input=file的值情况了,这样就导致了

始终无法触发change事件的问题。然后经过一番捣鼓+百度终于弄出了一个兼容的东西:

<div ><input type='file'><a>上传</a></div>

首先将input=file方在一个div中,DIV设置position,并且overflow=hidden,并且让input=file大小和宽度足以覆盖

整个DIV,同时让其的透明度opacity为0,这样就能显示被覆盖的a标记上传,但实际点击的却是覆盖在最上面的input=file标签

这样就解决了兼容问题。

上传的时候还有一个小兼容问题,好像在IE版本下如IE8,INPUT=FILE是只读的,为了清空input=file,每次上传完成之后

必须手动清空,即先克隆该节点,然后再替代原来的节点。。

不足:但是这样做仍然有一个问题,在谷歌下鼠标移入input=file标签时,鼠标手型不起作用,这就导致了用户体验不好,暂时还没有想到解决办法。

组件是基于form上传,没能实现进度条,为了兼容不能使用HTML5,因此尝试自己捣鼓flash上传,结果惨败。。。实力不济。多多学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐