最近在项目中遇到了许多上传问题,公司内部的组件,通过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上传,结果惨败。。。实力不济。多多学习。