2013-02-12 71 views
2

我創建了一個數組來存儲選定文件的列表。那麼,我必須誠實,我查閱了代碼,當我意識到它爲我的目的工作時,我使用了它。現在我需要訪問這個數組以手動刪除一些文件,但我已經嘗試過使用每個扇區的索引,但這不起作用。如何讀取JavaScript中的對象文件列表數組?

這是我如何創建數組和存儲文件。

var files = []; 
$("button:first").on("click", function(e) { 
       $("<input>").prop({ 
        "type": "file", 
        "multiple": true 
       }).on("change", function(e) { 
        files.push(this.files); 
       }).trigger("click"); 

}); 

我怎麼能讀取陣列的文件,如果它包含一個對象的fileList或從陣列獲得指數法[]?

回答

2

下面是我理解你的代碼:

每次單擊dom中的第一個按鈕時,都會生成接受多個文件的文件輸入對話框。返回時,對話將發出change事件,其中files變量(FileList對象)附加到函數上下文(this)。您的代碼將新創建的FileList推入files陣列。由於輸入接受多個文件,每個被推入files數組的對象都是一個FileList對象。

所以,如果你想通過文件陣列中的所有元素進行迭代,你可以把一個函數在change事件處理程序:

var files = []; 
$("button:first").on("click", function(e) { 
    $("<input>").prop({ 
     "type": "file", 
     "multiple": true 
    }).on("change", function(e) { 
     files.push(this.files); 
     iterateFiles(files); 
    }).trigger("click"); 
}); 


function iterateFiles(filesArray) 
{ 
    for(var i=0; i<filesArray.length; i++){ 
     for(var j=0; j<filesArray[i].length; j++){ 
      console.log(filesArray[i][j].name); 
      // alternatively: console.log(filesArray[i].item(j).name); 
     } 
    } 
} 

iterateFiles()功能我寫filesArray[i][j]是不是一個真正的多維數組 - - 而是一個包含FileList對象的單維數組,其行爲與數組非常相似......除了不能刪除/拼接其中的項目 - 它們是隻讀的。

有關,爲什麼你不能刪除查看更多資訊:How do I remove a file from the FileList

+2

讓我告訴你:「有一天,我想在編程方面達到一半。」是的,我誠懇地說。讀完這些之後,我瞭解到filelist對象是隻讀的,所以我不得不重新考慮如何發送額外的數據。所以,我創建了兩個數組:一個包含文件索引,另一個包含用戶想要刪除的文件。我將這兩個數據與objectFilelist通過ajax一起發送,並使用php文件,我完成所有的魔術。這是一件痛苦的事,但是,它可以被執行。非常感謝你。 – Leo 2013-02-13 03:40:24

+0

@MichaelVidal你是怎麼做到的。我一直在尋找這種解決方案,但我無法做到。請幫幫我 – 2015-04-27 05:34:31

-1

像這樣的東西?

for(var i = 0; i < files.length; i++) { 
    alert(files[i][0].name); 
    if (files[i][0].name == 'file.jpg') { 
     files.splice(i, 1) //remove the item 
    } 
} 

也就是說,由於您選擇它的方式,每個FileList中總是有一個文件。因此,對於每個文件列表,您只對其中的第一個文件感興趣。對於每一個文件,你可以得到的屬性如下定義:http://help.dottoro.com/ljbnqsqf.php

1

由於您使用jQuery你可以使用$.grep

files=$.grep(files, function(elementOfArray, indexInArray){ 
     /* evaluate by index*/ 
     return indexInArray != someValue; 
     /* OR evaluate by element*/ 
     return elementOfArray != someOtherValue; 
}); 

API參考:http://api.jquery.com/jQuery.grep/

+0

我想用'Array.prototype.some'一個'FileList'對象,但它不是一個數組。我想我可以嘗試轉換它,但這個'grep'解決方案與我的'.... length> 0'成對配對給了我一個很好的布爾值。沒有在API中看到這個功能,所以謝謝! – Pysis 2017-11-16 21:26:36

+0

@Pysis可以在Filelist或其他數組像對象上使用'[] .some.call()' – charlietfl 2017-11-16 21:40:50

相關問題