如何在提交表单之前检查是否已选择上传文件

时间:2017-07-21 11:19:15

标签: javascript forms

我有一个表格,可以选择上传文件。

我已经提交了一个脚本来检查在提交表单之前文件大小是否太大,如果用户尝试上传大于2MB的文件警报显示,并且文件小于2MB文件已上传。然后我使用PHP来验证表单并将其处理成电子邮件

但是,如果用户根本不尝试上传文件,则会弹出警告消息,从而阻止提交表单。

如果用户不想包含上传文件,如何才能提交表单? 我的代码是:

<script>
document.forms[0].addEventListener('submit', function( evt ) {
    var file = document.getElementById('file').files[0];

    if(file && file.size < 2097152) { // 2 MB (this size is in bytes)
          //Submit form        
    } else {
        //Prevent default and display error
        alert("File is  over 2Mb in size!");
        evt.preventDefault();
    }
}, false);
</script>

如果有人能帮我找到答案,请提前多多谢意。

火车

2 个答案:

答案 0 :(得分:2)

  

如果用户不想包含上传文件,如何才能提交表单?

您需要将if逻辑更改为检查大小并仅在文件存在时停止表单提交,而不是总是如此。现在你的代码一直在检查文件,如果它不存在,它会进入else块,从而停止你的提交事件。

我建议你重构你的逻辑如下。

<script>
 document.forms[0].addEventListener('submit', function( evt ) {
 var file = document.getElementById('file').files[0];

 if(file)  // perform the size check only if a file is present.
 {
   if(file.size < 2097152) { // 2 MB (this size is in bytes)
      //Submit form        
   } else {
     //Prevent default and display error
     alert("File is  over 2Mb in size!");
     evt.preventDefault();
   }
 }    

 }, false);
</script>

当没有上传文件时,此逻辑提交表单。当上传文件时,它会检查以确保文件小于2 MB。

答案 1 :(得分:0)

如果没有选择文件,则返回true

<script>
document.forms[0].addEventListener('submit', function( evt ) {
    var file = document.getElementById('file').files[0];

    if(!file)
        return true;

    if((file && file.size < 2097152)) { // 2 MB (this size is in bytes)
          //Submit form        
    } 
    else 
        //Prevent default and display error
        alert("File is  over 2Mb in size!");
        evt.preventDefault();
    }
}, false);
</script>