2011-05-29 20 views
38

multiple="multiple"属性を持つファイル入力があり、複数のファイルを一度に選択できるようになりました。私は選択したファイル名とその前にカウントを表示するが、私はjavascriptを使用してファイルの入力要素からこの情報を取得する方法がわからないのですか?Javascript複数の属性を持つファイル入力要素からファイル数とファイル名を取得しますか?

<input type="file" id="fileElementId" name="files[]" size="20" multiple="multiple" /> 

私はこれ試してみた:

document.getElementById('fileElementId').value 

をしかし、私は複数のファイルを選択した場合、これは一つだけのファイル名を返します。 JavaScriptを使用すると、multiple属性を持つファイル入力要素から、選択したファイルの数とその名前を取得するにはどうすればよいですか?

答えて

64

を、あなたの<input>要素は、 "ファイル" プロパティを持つことになります。それはあなたに ".length"プロパティを持つ "FileList"リファレンスを与えます。また、 "FileList"インスタンスには ".item()"というアクセスメソッドがあり、個々の "File"要素にアクセスするには整数argが必要です。それらには ".name"プロパティがあります。

そう:これはもちろん、古いIEのバージョンでは動作しない、と私はSafariとChromeのサポートがどのように徹底してもわからない

var inp = document.getElementById('fileElementId'); 
for (var i = 0; i < inp.files.length; ++i) { 
    var name = inp.files.item(i).name; 
    alert("here is a file name: " + name); 
} 

。しかし、ファイル入力に "複数"が設定されたページを作成している場合は、すでに踊っています:-)

+1

Firefox 3.6+、Chrome 2+、Safari 4+、Opera 11+などで複数の機能がありますので、IE 9以外のどこでも可能です。私にとっては、フラッシュクッキーのバグを修正してセッション固定問題を導入するよりも、ブラウザをアップグレードするように指示するほうが簡単です。 – Stann

+0

ありがとう。これはクロム、ファイアフォックス、オペラ、サファリで私のために働いた。確かにIEであるゴミの山の中で惨めに失敗します。 :) lol – Stann

+4

ファイルサイズが必要な場合はFWIW:fileSize = inp.files.item(i).size' – gordon

21

これはテストされていないですが、あなたは試みることができる:HTML5ファイルのものをサポートする新しいブラウザで

$('#fileElementId').get(0).files; 

または

document.getElementById('fileElementId').files; 
+15

なぜあなたはそれをテストし、それが動作しているかをお知らせください。 – Ibu

+3

@lbu:私はなぜそうでないのか分かりません。主なものは - "ファイル"要素のプロパティです。また、 - はい - 私はチェック - それはjqueryまたは生の方法のいずれかで動作します。 – Stann

+4

$( '#fileElementId')。get(0).filesオブジェクトだけを返します。代わりに$( '#fileElementId')。get(0).files.lengthを使用してください。 –

0

2番目の答えが間違っていました。

回答はdocument.getElementById('fileElementId').files;の代わりにdocument.getElementById('fileElementId').files.length;である必要があります。