多次选择同一文件时,如何验证“ <input type =“ file” />“?

时间:2018-07-30 04:00:57

标签: javascript angularjs excel

我有一个输入控件,可以选择一个.xlsx文件

<input name="Excelfile" type="file" accept=".xlsx" onchange="fileChange($event)">

每当选择一个文件时,就会调用fileChange()函数,在该函数中读取其中的工作表并将其列出。

考虑一下,我有一个SPA(单页应用程序),当选择了excel工作簿时,它会列出工作表名称。现在,我选择其中有4个工作表的文件“ Sample.xlsx”,SPA将列出所有4个工作表,但是当我在SPA仍在运行时向工作簿中添加另一个工作表并选择相同的文件“ Sample.xlsx”时,它不会列出其中的所有5个工作表。但是,当我重新启动SPA时,它会列出所有5个工作表。

如何在不重新启动SPA的情况下反映工作簿中的更改?

2 个答案:

答案 0 :(得分:0)

在这里我尝试实现的是,创建一个files数组,触发onchange事件,它将获取文件名并与files数组匹配,如果不是这样的话在数组中,然后将文件名推送到数组。

var files = [];
function fileChange(event){
  var fileName = event.target.files[0].name
  if(files.indexOf(fileName) != -1){
    alert('file in list')
    event.target.value = '';
  }else{
    files.push(fileName)
  }
}
<input name="Excelfile" type="file" accepts=".xlsx" onchange="fileChange()">

答案 1 :(得分:0)

您还需要比较文件的大小,因此在@Akhil的解决方案中应使用对象数组而不是字符串数组。作为不同的文件,我具有相同的名称和扩展名。