用于检查多个文件总大小的简单Javascript循环

用于检查多个文件总大小的简单Javascript循环,javascript,for-loop,dom-events,Javascript,For Loop,Dom Events,如何将此代码实现为20个文件的循环?它们将具有id=“myFile1”、“myFile2”等 var myFile=document.getElementById('myFile'); myFile.addEventListener('change',function()){ 警报(此.files[0].size); }); 我的第一个想法是编写20个脚本,但我并不认为这是一个好的解决方案,我更喜欢干净的代码 我试过这个。。。但由于某些原因,它不起作用-第二个文件报告“NaN”,而不是以字节

如何将此代码实现为20个文件的循环?它们将具有id=“myFile1”、“myFile2”等


var myFile=document.getElementById('myFile');
myFile.addEventListener('change',function()){
警报(此.files[0].size);
});
我的第一个想法是编写20个脚本,但我并不认为这是一个好的解决方案,我更喜欢干净的代码

我试过这个。。。但由于某些原因,它不起作用-第二个文件报告“NaN”,而不是以字节为单位的文件大小

<script type="text/javascript">

var myFile = document.getElementById('myFile'); 
myFile.addEventListener('change', function() {
  var totalSize = this.files[0].size;
  alert(totalSize); 
});

</script>

<script type="text/javascript">

var myFile1 = document.getElementById('myFile1'); 

myFile1.addEventListener('change', function() {
  var totalSize = totalSize + this.files[0].size;
  alert(totalSize); 
});

</script>

var myFile=document.getElementById('myFile');
myFile.addEventListener('change',function()){
var totalSize=this.files[0].size;
警报(总大小);
});
var myFile1=document.getElementById('myFile1');
myFile1.addEventListener('change',function(){
var totalSize=totalSize+this.files[0].size;
警报(总大小);
});
我还想实现一个IF条件,仅当totalSize大于7mb时才会发出警报,这意味着我需要
totalSize/(1024*1024)
——这很容易做到,但不是循环


你能帮我建立一个计算所有文件总大小的工作循环吗?myFile是
输入类型=“file”
元素的ID。

尝试使用以下逻辑:

<script type="text/javascript">
 var totalSize=0;
 function checkSize() {
  totalSize = totalSize + this.files[0].size;
  alert(totalSize); //write logic to check size validation etc. here
 }
 for(var i=1;i<=20;i++)
 {
  var myFile = document.getElementById('myFile'+i); 
  myFile.addEventListener('change',checkSize);
 }
</script>

var totalSize=0;
函数checkSize(){
totalSize=totalSize+this.files[0].size;
警报(totalSize);//在此处写入逻辑以检查大小验证等
}

对于(var i=1;i我不知道我是否正确理解了您的需求,但这可能是您的情况:

代码

 var totArray = [];

 for (var x = 1; x <= 5; x++) {
    var currFile = document.getElementById("myFile"+x);

    currFile.addEventListener('change', function(x){
        totArray[this.id] = parseInt(document.getElementById(this.id).value); //here goes file.size

        var currTot = 0;
        for(var key in totArray){
            currTot += totArray[key];
        }
        if(currTot > 10)
            alert("file sizes > 10 MB");
    });
 }
var-totArray=[];
对于(变量x=1;x 10)
警报(“文件大小>10 MB”);
});
}
为了简单起见,我使用了一些文本输入,以显示循环如何将每个输入添加到同一事件中。要测试它,请输入一个整数,表示文件的大小,它应该可以工作


希望对您有所帮助,问候您

谢谢。然而,这对我来说似乎太复杂了,即使它不是。SanjeevRai的解决方案更简单、更清晰。你能帮我纠正我的语法我的“警报”状态吗?警报(“您已超过最大文件大小上载限制。您的文件大小为:”+(totalSize/(1024*1024))+“MB。\n\n请删除上一个附件。”);我看不出这有什么不对。你有什么错?无论如何,如果用户从您的输入中删除一个文件,那么总大小应该会减小。。SanjeevRai的解决方案并没有涵盖这一案例。我们已经弄清楚了,它只是doble“而不是”在一开始。我的错。除此之外,我想我必须试试你的代码,它看起来不错!我试图编辑你的代码,但从parse这一行我看不懂。我想我必须写这个.fils[0]。在某个地方设置大小并在某个地方设置限制,但我看不到单位或类似的东西:/parseInt(…),而不是parseInt(…),应该在那里为文件大小设置整数val。限制在该语句中:“如果(currTot>10)”。10是提高警报的大小限制
 var totArray = [];

 for (var x = 1; x <= 5; x++) {
    var currFile = document.getElementById("myFile"+x);

    currFile.addEventListener('change', function(x){
        totArray[this.id] = parseInt(document.getElementById(this.id).value); //here goes file.size

        var currTot = 0;
        for(var key in totArray){
            currTot += totArray[key];
        }
        if(currTot > 10)
            alert("file sizes > 10 MB");
    });
 }