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

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

最近在项目中遇到了许多上传问题,公司内部的组件,通过form上传,需要使用input=file触发选择文件,

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

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

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

       <input type="button" value="http://www.mamicode.com/上传" 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上传,结果惨败。。。实力不济。多多学习。

 

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