3

選択したファイルのリストを格納する配列を作成しました。正直に言うと、コードを調べたところ、自分の目的に合っていることに気づき、それを使用しました。いくつかのファイルを手動で削除するために、この配列にアクセスする必要がありますが、各セクターのインデックスを使用しようとしましたが、これは機能しません。

これは、配列を作成してファイルを保存する方法です。

 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 が含まれている場合、または配列からインデックスを取得する場合、配列 files[] を読み取るにはどうすればよいですか?

4

3 に答える 3

4

あなたのコードを理解する方法は次のとおりです。

dom の最初のボタンがクリックされるたびに、複数のファイルを受け入れるファイル入力ダイアログが生成されます。ダイアログが戻ると、変数 (FileList オブジェクト) が関数コンテキスト ( ) に関連付けられたchangeイベントが発行されます。コードは、新しく作成された FileList を配列にプッシュします。入力は複数のファイルを受け入れるため、配列にプッシュされる各オブジェクトは FileList オブジェクトです。filesthisfilesfiles

changeしたがって、files 配列内のすべての要素を反復処理する場合は、イベント ハンドラーに関数を配置できます。

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 オブジェクトを含む 1 次元配列です。ただし、アイテムを削除/スプライスすることはできません。それらは読み取られます。 -それだけ。

削除できない理由の詳細については、次を参照してください: FileList からファイルを削除するにはどうすればよいですか

于 2013-02-12T03:59:34.237 に答える
2

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/

于 2013-02-12T03:05:12.347 に答える
0

このようなもの?

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には常に1つのファイルがあります。したがって、各ファイルリストについては、その中の最初のファイルにのみ関心があります。ファイルごとに、ここで定義されているプロパティを取得できます:http: //help.dottoro.com/ljbnqsqf.php

于 2013-02-12T02:06:25.813 に答える