0

如何将此代码实现为 20 个文件的循环?他们将有 id="myFile1"、"myFile2" 等。

<script type="text/javascript">
var myFile = document.getElementById('myFile'); 
myFile.addEventListener('change', function() {
  alert(this.files[0].size);   
});
</script>

我的第一个想法是编写 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>

我还想实现一个 IF 条件,仅当 totalSize 大于 7 MB 时才会发出警报,这意味着我需要 -easy totalSize/(1024*1024)to do,但不需要 loop 。

你能帮我建立一个工作循环来计算所有文件的总大小吗?myFile 是input type="file"元素的 ID。

4

2 回答 2

2

尝试并使用以下逻辑:

<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>
于 2013-06-05T06:43:01.397 回答
0

我不知道我是否正确理解了您的需求,但这可能是您的情况:http: //jsbin.com/ozadak/2/edit

代码

 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");
    });
 }

为简单起见,我使用了一些文本输入来展示循环如何工作,将每个输入添加到相同的事件中。要对其进行测试,请输入一个整数,表示您的文件权重有多少 MB,它应该可以工作。

希望它有帮助,问候

于 2013-06-05T07:04:29.833 回答