<input type="file" id="excel-file" onchange="readExcel(this)" style="margin-left:9px">这个的onchange事件不能传相同名称但内容不同的文件怎么办给个具体的代码案
时间: 2023-07-06 15:38:11 浏览: 69
如果要确保选择的文件名称相同并且文件内容相同,可以在`onchange`事件中进行比较。比较文件内容可以使用文件的哈希值,例如MD5或SHA1等。以下是一个示例代码:
```html
<input type="file" id="excel-file" onchange="checkFile(this)" style="margin-left:9px">
```
```javascript
var lastFile = null; // 上一次选择的文件
function checkFile(fileInput) {
var file = fileInput.files[0];
if (lastFile && file.name == lastFile.name) { // 如果选择了相同名称的文件
var reader1 = new FileReader();
reader1.onload = function(e1) {
var hash1 = md5(e1.target.result); // 计算当前选择的文件的哈希值
var reader2 = new FileReader();
reader2.onload = function(e2) {
var hash2 = md5(e2.target.result); // 计算上一次选择的文件的哈希值
if (hash1 == hash2) { // 如果哈希值相同则说明文件内容相同
alert("不能选择相同名称但内容不同的文件,请重新选择!");
} else {
lastFile = file;
readExcel(fileInput); // 调用读取Excel文件的函数
}
};
reader2.readAsBinaryString(lastFile); // 以二进制格式读取上一次选择的文件内容
};
reader1.readAsBinaryString(file); // 以二进制格式读取当前选择的文件内容
} else {
lastFile = file;
readExcel(fileInput); // 调用读取Excel文件的函数
}
}
function md5(str) {
// 计算字符串的MD5值
// ...
}
```
在上面的示例代码中,`md5`函数用于计算字符串的MD5值。当用户选择新的文件时,先计算该文件的哈希值,然后再计算上一次选择的文件的哈希值,如果两个哈希值相同则说明文件内容相同,弹出提示框并取消选择,否则更新`lastFile`变量并调用读取Excel文件的函数。