简体   繁体   English

使用jQuery多次上传的文件大小验证

[英]File Size Validation on multiple upload with jquery

I have a multiple file upload input. 我有多个文件上传输入。 I'm trying to validate the size for each file. 我正在尝试验证每个文件的大小。 It works kind of but depends on which order the files are selected. 它可以工作,但取决于选择文件的顺序。 I hate javascript & I suck at it, please help. 我讨厌javascript,我很烂,请帮忙。

http://jsfiddle.net/2u9kq7fe/1/ http://jsfiddle.net/2u9kq7fe/1/

$('input[type="file"]').change(function(){
    var imageSizeArr = 0;
    var imageSize = document.getElementById('blah');
    var imageCount = imageSize.files.length;
    for (var i = 0; i < imageSize.files.length; i++)
    {
         var imageSize = imageSize.files[i].size;
         if (imageSize > 5000000) {
             $('#test').text('3');
             var imageSizeArr = 1;
         }
         if (imageSizeArr == 1)
         {
             $('.element').text('files too big');
         }
         else if (imageSizeArr == 0)
         {
             $('.element').text('files not too big');
         }
     }
 }); 

You are defining a reference to input field: 您正在定义对输入字段的引用:

var imageSize = document.getElementById('blah');

and later in the for loop you redefine it again, because: 然后在for循环中,您再次重新定义它,因为:

for (var i = 0; i < imageSize.files.length; i++) {
    var imageSize = imageSize.files[i].size;

Remember that there is no block-scope in javascript, so var imageSize in the loop affects previously defined value. 请记住,javascript中没有块作用域,因此循环中的var imageSize会影响先前定义的值。

This is your problem. 这是你的问题。 Pick different name for size in the loop and it will work. 在循环中选择其他名称作为大小,它将起作用。

try like below example; 尝试像下面的例子;

<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#upload").bind("click", function () {
            if (typeof ($("#fileUpload")[0].files) != "undefined") {
                var size = parseFloat($("#fileUpload")[0].files[0].size / 1024).toFixed(2);
                alert(size + " KB.");
            } else {
                alert("This browser does not support HTML5.");
            }
        });
    });
</script>

All credits go to @dfsq but as a js beginner it took me some time to figure out the vague description of what he meant with "Pick different name for size " so for all the confused ones here is the working code: 所有的积分都归@dfsq所有,但是作为一个js初学者,我花了一些时间弄清楚他对“为尺寸选择其他名称”的含义的模糊描述,因此对于所有困惑的人,这里是有效的代码:

html: HTML:

<input type=file name=img[] id=files accept=".jpg, .JPG, .jpeg, .JPEG" multiple=multiple>

js: JS:

$('input#files').change(function(){
  var imageSizeArr = 0;
  var imageArr = document.getElementById('files');
  var imageCount = imageArr.files.length;
  var imageToBig = false;
  for (var i = 0; i < imageArr.files.length; i++){
     var imageSize = imageArr.files[i].size;
     var imageName = imageArr.files[i].name;
     if (imageSize > 5000000){
         var imageSizeArr = 1;
     }
     if (imageSizeArr == 1){
         console.log(imageName+': file too big\n');
         imageToBig = true;
     }
     else if (imageSizeArr == 0){
         console.log(imageName+': file ok\n');
     }
  }
  if(imageToBig){
    //give an alert that at least one image is to big
    window.alert("At least one of your images is too large to process, see the console for exact file details.");
    }
});  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM