我具有仅上传xls
个文件的文件验证。但是,如果我要上传除excel以外的文件,则它会正确提示错误。
但是问题是alert
在IE
中触发了两次
下面是我的代码。
function isFileValid() {
var allowedFiles = [".xlsx", ".xls"];
var fileUpload = document.getElementById("MainContent_fluploadData");
var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(" + allowedFiles.join('|') + ")$");
if (!regex.test(fileUpload.value.toLowerCase())) {
alert("Please upload files having extensions: " + allowedFiles.join(', ') + " only.");
$('#MainContent_fluploadData').val('');
return false;
}
}
HTML
<asp:FileUpload ID="fluploadData" Style="padding-top: 0px; padding-left: 0px; padding-bottom: 0px; padding-right: 0px;" CssClass="form-control" runat="server" onchange="return isFileValid();" />
注意
我正在使用更新面板中的文件上传控件
答案 0 :(得分:3)
总结评论和解决方案中得出的结论;此错误是由IE处理输入元素的onchange事件与其他浏览器的方式不同引起的。对于IE,当您以编程方式更改文件输入元素的值时(例如与$('#MainContent_fluploadData').val('');
一样),实际上会导致发出另一个 onchange事件,而在其他浏览器中则不会。在这种情况下,大多数其他浏览器不会重新发射onchange事件。
在这种情况下,最简单的解决方案是通过修改IF语句,仅添加检查以查看您自己的代码是否已将输入字段恢复为“”(未选择文件)。
if (!regex.test(fileUpload.value.toLowerCase()))
收件人:
if (!regex.test(fileUpload.value.toLowerCase()) && fileUpload.value!=='')
如果您开始执行诸如还原为最后一个值而不是空字符串(未选择的文件)之类的操作,则需要执行诸如将上次检查的文件名的值保存为该函数之外的变量的操作,然后进行检查对照新文件名查看文件选择是否实际上已更改。
有关更多信息: