2013-02-28 80 views
2

我有它处理我的网页上拖拽文件拖放功能:删除元素离队文件清单

function createDropHandlers() { 
    var target = document; 
    if (target === null) { 
    return false; 
    } 

    // attach the 'dragover' event to the container 
    target.addEventListener('dragover', function(event) { 
    event.preventDefault(); 
    }, true); 

    // attach the 'drop' event to the container 
    target.addEventListener('drop', function(event) { 
    event.preventDefault(); 
    var files = event.dataTransfer.files; 

    // if (files.length > 3) 
    // do something like 
    // files.slice(files.length-3, files.length); 

    for (var i = 0; i < files.length; i++) { 
     processFile(files[i]); 
     // ... 
    } 
    }, true); 
} 

我希望做的是在我for循环(与之前的“处理”中的任何文件方式)来检查是否拖动了3个以上的文件,如果是这样,只需将“数组”分割成最后3个元素即可。我知道FileList是只读的,所以我不知道什么是我在这里的选项来实现这一目标?
我不会上传文件,以及“加工”后,他们和我不需要File对象任何责任。我需要做的就是检查文件是否是音频文件,从中读取一些元数据并在页面上显示元数据。

回答

2

slice()是Array的原型的一种方法。而它返回一个新的数组,它可能不在FileList原型中。您可以使用Array.prototype.slice方法并将其应用在文件列表中:

Array.prototype.slice.call(fileList); //will return an array-copy of the filelist 
Array.prototype.slice.call(fileList, 0, 3); //Then simply use the slice arguments at your convenience 

您可以使用(而且经常会看到在JS-库中的代码)的论点这一招,也。请注意,切片不会修改原始对象,就像splice()一样。

你可以查看https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice#Array-like关于MDN的解释。