以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="上传" 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上传,结果惨败。。。实力不济。多多学习。

 

转载于:https://www.cnblogs.com/ccjs/p/3980365.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值