包含多个文件和其他输入字段的表单验证


Form validation with more than one files and other input fields together

我有一个表单,允许用户输入文本并上传至少一个文件,文件大小小于1GB。当点击表单的"提交"按钮时,该需求将通过javascript进行验证。但是,当我添加文件验证时,它没有任何显示文件名称和大小的响应,尤其是当文件超过1GB时。

以下哪种方法更好?

  1. 选择文件后请检查文件大小,如果文件大小超过1GB,则会出现警告,告诉用户文件太大,需要重新选择
  2. 选择文件后,单击"提交"按钮,在继续使用PHP将文件上传到服务器之前,整个表单的验证,包括输入文本字段和文件大小,都是用JavaScript完成的

这是我的表格:

<script type="text/javascript" src="validate.js"></script>
  <form id="fileUpload" method="post" action="upload_action.php">
    <p>Text input: <input type="text" name="text_input" value=""/></p>
    <p>File upload: <input type="file" name="upload_file[]" multiple/></p>
    <input type="submit" value="Submit" onclick="return validate_form();"/>
  </form>

以及我的验证JavaScript(validate.js):

function validate_form() {
    var valid=true;
    if (document.forms['fileUpload']['text_input'].value=='') {
        alert('You have to enter text');
        valid=false;
    }
    // File size validation goes here
}

香港时间下午12:20编辑:

现在可以按如下方式检查文件的大小:

在PHP文件中:

<form id="fileUpload" method="post" action="upload_action.php">
    <p>Text input: <input type="text" name="text_input" value=""/></p>
    <p>File upload: <input type="file" id="upload_file" name="upload_file[]" multiple="true"></p>
    <input type="submit" value="Submit" onclick="return validate_form();"/>
  </form>

在javascript 中

var MAX_SIZE = 1073741824;
    var x=document.getElementById("upload_file");  
    for(var i=0; i<x.files.length; i++)
    {
         if (x.files[i].size > MAX_SIZE) {
            alert('The file "'+x.files[i].name+'" has exceeded the max file size, 1GB. Please choose smaller file.');
            valid=false;
            return false; 
         }
    }

但我不得不面对另一个问题:当我从文件对话框中选择文件时,我只看到"选择"按钮附近的单词"2个文件",而不是所选文件的名称。那么,我该怎么做才能显示所选文件的名称呢?再次感谢!

man。我在文件输入更改后进行投票,因此用户有机会立即更正。

如果我理解正确,你可以在一个变化事件中做这样的事情:

var MAX = 1000000000;
if (document.forms['fileUpload']['text_input'].files[0].size > MAX) {
    valid = false;
    alert('you have exceeded the max file size, 1GB. Please choose smaller file.');
    return false; // no submit
}

希望能有所帮助。

由于您的文件选择是多种类型的,您需要迭代文件数组并检查每个文件的大小

function validate_form(){
var MAX_SIZE = 1000000000;
var myForm=document.forms['fileUpload']
//other field validations   
for(var file in myForm['upload_file[]'].files)
     if (file.size > MAX) {
        alert('you have exceeded the max file size, 1GB. Please choose smaller file.');
        return false; 
     }
}

}