附件上传在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
    评论
使用 wangEditor5 上传附件需要借助插件 `wangEditor-plugin-upload-attachment` 提供的 API。 在 wangEditor5 编辑器初始化之前,需要定义上传附件的配置,如下所示: ```js const uploadConfig = { uploadUrl: 'http://your-upload-url.com', // 上传文件的接口地址 uploadFieldName: 'file', // 上传文件的参数名称 uploadHeaders: { // 上传文件时需要携带的 HTTP 头部信息 'Authorization': 'Bearer xxxxxxxxxxxx' }, uploadParams: { // 上传文件时需要携带的其他参数 'type': 'image' }, uploadTimeout: 5000, // 上传文件的超时时间 withCredentials: true // 是否携带 cookie } ``` 其,`uploadUrl` 是上传文件的接口地址,`uploadFieldName` 是上传文件的参数名称,`uploadHeaders` 和 `uploadParams` 是上传文件时需要携带的 HTTP 头部信息和其他参数,`uploadTimeout` 是上传文件的超时时间,`withCredentials` 是是否携带 cookie。 在 wangEditor5 编辑器初始化时,需要将上传附件的配置传递给插件 `wangEditorPluginUploadAttachment`,如下所示: ```js const editor = new wangEditor5('#editor') editor.config.plugins.push(wangEditorPluginUploadAttachment(uploadConfig)) editor.create() ``` 然后,在上传附件的按钮点击事件,可以使用 `editor.uploadFile` 方法上传文件,如下所示: ```js const fileInput = document.createElement('input') fileInput.type = 'file' fileInput.addEventListener('change', function () { const file = fileInput.files[0] editor.uploadFile(file) }) ``` 这样就完成了 wangEditor5 的附件上传功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值