Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript警报在IE中提示了两次_Javascript_Jquery_Asp.net - Fatal编程技术网

Javascript警报在IE中提示了两次

Javascript警报在IE中提示了两次,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我只对上传xls文件进行了文件验证。但是,如果我上传的是excel以外的文件,它会正确地提示错误 但问题是警报在IE 下面是我的代码 function isFileValid() { var allowedFiles = [".xlsx", ".xls"]; var fileUpload = document.getElementById("MainContent_fluploadData"); var regex = new RegExp("([

我只对上传
xls
文件进行了文件验证。但是,如果我上传的是excel以外的文件,它会正确地提示错误

但问题是
警报
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();" />

注意


我正在使用更新面板内的文件上载控件来总结评论中得出的结论和解决方案;这个错误是由于IE处理输入元素onchange事件的方式与其他浏览器不同造成的。对于IE,当您以编程方式更改文件输入元素的值时,就像您使用
$('MainContent\u fluploadData').val('')所做的那样,它实际上会导致发出另一个onchange事件,而在其他浏览器中则不会。在这种情况下,大多数其他浏览器不会重新发出onchange事件

此方案中最简单的解决方案是,只需添加一个检查,查看您自己的代码是否已将输入字段还原回“”(未选择任何文件),方法是从以下位置修改if语句:

if (!regex.test(fileUpload.value.toLowerCase()))
致:


如果您开始执行诸如还原到最后一个值而不是空字符串(未选择的文件)之类的操作,您可能希望执行诸如将上次检查的文件名的值作为该函数之外的变量保留的操作,然后对照新文件名检查它,以查看文件选择是否已实际更改


有关更多信息:


使用此
$('#MainContent_fluploadData').val('')重置fileupload元素时再次触发“onChange”event@Jabberwocky:没有得到它,伙计。你的意思是在活动开始和结束时都说?@GrafiCodeStudio:是的,我想是这样。有什么建议吗?重复@GrafiCodeStudio所说的。这是IE和其他浏览器之间的一个已知区别——它们以不同的方式实现onchange规范,当输入字段以编程方式更改时,IE会触发事件,而其他浏览器则不会。同一个导致问题的bug的例子——不完全是bug,但考虑到其他浏览器如何处理它(在本例中,就是因为它而将bug引入到各种平台上),它只是不规则的。在您的场景中,我建议您只需执行一些操作,例如在该函数之外保留一个变量,例如“lastCheckedFilename”,然后在onchange事件处理程序中,通过比较新文件名和lastCheckedFilename来检查用户是否确实更改了所选文件,并且仅在它们不同时发出警报。
if (!regex.test(fileUpload.value.toLowerCase()) && fileUpload.value!=='')