js上传文件时,同一个文件上传之后,再次选择同一个文件进行上传,change事件不会触发,如何解决
时间: 2024-03-27 22:35:02 浏览: 136
这是因为在同一个文件上传之后,再次选择相同的文件时,文件的最后修改时间不会改变,因此change事件不会被触发。您可以通过以下两种方式解决这个问题:
1. 将input[type='file']的value设置为空字符串,这样即使选择的是同一个文件,也会触发change事件,代码如下:
```
var fileInput = document.getElementById('file-input');
fileInput.value = '';
fileInput.addEventListener('change', function() {
// 处理文件上传逻辑
});
```
2. 使用带有随机参数的URL来上传文件,这样即使是同一个文件,也会被视为新的文件,从而触发change事件,代码如下:
```
var fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', function() {
var file = fileInput.files[0];
var xhr = new XMLHttpRequest();
var formData = new FormData();
formData.append('file', file);
xhr.open('POST', '/upload?rand=' + Math.random(), true);
xhr.send(formData);
});
```
相关问题
el-upload希望上传时当再次点击同一个文件能再次触发事件
`el-upload` 是 Element UI 提供的一个用于文件上传的组件,在Vue.js中非常常见。如果你想让用户多次点击同一个文件可以再次触发上传事件,通常需要在事件处理程序中添加一些逻辑判断。
你可以通过监听 `on-change` 或者 `on-success` 等事件,并在事件回调里检查当前选中的文件是否已经存在。如果文件一致,则阻止默认的行为,让用户可以选择其他文件;若文件不同则正常上传。
例如,这是一个简单的示例:
```javascript
<template>
<el-upload
:action="uploadUrl"
@change="handleFileChange"
ref="upload"
></el-upload>
</template>
<script>
export default {
data() {
return {
selectedFile: '',
};
},
methods: {
handleFileChange(file) {
if (file.name === this.selectedFile) {
this.$refs.upload.clearFiles(); // 清除已选择的文件
} else {
this.selectedFile = file.name;
// 正常上传逻辑
}
},
},
};
</script>
```
在这个例子中,每次文件改变时会检查新选的文件名是否和之前的一致。如果是相同的文件,则清除已选文件;如果不是,则更新 `selectedFile` 并进行正常的上传操作。
阅读全文