以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上传,结果惨败。。。实力不济。多多学习。
因为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上传,结果惨败。。。实力不济。多多学习。
相关文章推荐
- input file 文件上传控件隐藏后用button触发它的click事件文件传不上去的解决方案
- 使用input file 通过ajax 上传文件中onChange事件只触发一次问题
- file 标签上传文件,直接样式太难看!隐藏它,通过别的按钮触发它,又会有IE兼容问题。
- chrome下input:file无法触发click事件的问题
- 将html中的<input type="file" />(选择文件) 元素隐藏,并通过其它方式触发点击。file input 美化
- HTML通过button触发input-file控件上传文件的问题
- 解决动态生成input无法触发click事件的问题
- 通过input 的file 控件,上传图片,如何获取文件的大小问题
- 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
- 解决JS(Vue)input[type='file'] change事件无法上传相同文件的问题
- 解决file input 选择相同文件不触发change事件
- input选择某文件后想重新选择该文件无法触发onchange事件
- IE9的一个BUG:propertychange和input事件在拖拽 / 剪切 / 删除时无法触发
- 移动端input弹出带有搜索按钮的键盘与获取点击搜索按钮触发的事件
- IE7,IE8,上传文件控件input file和asp.net FileUpload控件无法获取完整路径的解决办法
- 移动端input弹出带有搜索按钮的键盘与获取点击搜索按钮触发的事件
- onclick事件触发 input type=“file” 上传文件
- 伪主动触发input:file的click事件
- 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
- 伪触发 input file 的click事件