附件上传在IE中的问题

附件上传在IE中的问题

问题描述:自定义的文件上传input:file在IE浏览器上进行附件上传时,input:fileonchange事件失效。

原因分析:

  1. input:file 控件的onchange事件实际上监听的是input框中的字符串的变化,如果字符串没有发生变化,则不会触发onchange事件。
  2. input:file 控件在IE浏览器上会缓存上次添加的文件,导致再次上传同一个文件时onchange事件不能正常触发,即使刷新页面缓存还在。
  3. input:file 控件在IE浏览器中,通过js绑定input:fileonchange事件const file = document.getElementById('file');file.click();file.onchange = function (event) {},如果添加了属性 hidden 或者 添加了样式 display: none,或者 opacity: 0,则onchange事件都会失效。

解决方法

在 vue 中的示例:

<template>
	<div>
		<el-button
			type="primary"
			size="small"
			@click="handleUpload">附件上传</el-button>
		<input
			ref="file"
			type="file"
			id="file"
			name="file"
			hidden
			@change="handleFileChange">
	</div>
</template>
export default {
	methods: {
		handleUpload() {
			const element = this.$refs.file
			element.click()
		},
		handleFileChange(event) {
			const file = event.target.files[0]
			if (file) {
				// ...
			}
		}
	}
}

其他参考方案

网上的几种可供参考的方法如下:

  1. 使用 position: absolute; top: 0;left: 0;
  2. 使用 height: 0; overflow: hidden;
  3. 使用 input:file克隆,每次附件上传成功后 克隆一份 input:file,移除旧的input:file控件,植入新的input:file控件,实际上就是先删除原来的input:file控件,然后在原位置上放置一个新的input:file,目的就是为了阻止浏览器缓存 附件。
  4. 在触发附件上传的按钮上放置 input:file 控件,并将控件设置 透明,点击按钮实际上是点击的 input:file 控件,这样可以解决问题,但是鼠标样式会影响用户体验。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值