私はjqueryを使用してhtml5ファイルのアップロードでいくつかのテストを行っていましたが、(少なくとも私にとっては)奇妙なことに遭遇しました。ファイルコントロールで選択されたファイルのリストを取得しようとしました:
<html><head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
</head>
<body>
<input type="file" multiple="multiple" id="inputFile" name="inputFile">
<button onclick="buttonClicked()" type="button">upload</button>
<script type="text/javascript">//<![CDATA[
function buttonClicked() {
console.log($("#inputFile").val()); // depending on the browser, gives either the file name, either the full path, but only for the first file
console.log($("#inputFile").files); // gives undefined
console.log($("#inputFile").attr("files")); // gives undefined
console.log($("#inputFile").get()); // according to the jquery documentation, give the dom element...
console.log($("#inputFile").get().files); // ...but strangely, files is undefined
console.log($("#inputFile")[0].files); // on the other hand, this gives me the list of files
}
//]]>;
</script>
</body></html>
ですから、最初は$( "#inputFile")。val()が私にそれを最小限に抑えてくれると期待していましたが、そうではありませんでした。そこで、input.filesのバリエーションを試しましたが、jqueryオブジェクトに適合していないように見えたため、実際には機能することを期待していませんでした(ただし、わかりません)。そこで、jqueryから基になるdom要素を取得して、ファイルアイテムにアクセスしようとしました。そして、それも定義されていないので、それは奇妙になるところです。一方、$( "#inputFile")[0] .filesは、期待される結果をもたらします。
[編集]そして、よくあることですが、その質問を入力しているときに、自分で解決策を見つけました。とにかくここに置いておきますので、それに苦労している人は誰でもそれを解決するチャンスがあります。それは基本的にRRTFMに行きます、本当にRTFMのように:
一致したすべてのDOMノードは、この呼び出しによって返され、標準の配列に含まれます
つまり、要素が1つしかない場合でもです。したがって、呼び出し:
console.log($("#inputFile").get());
files
1つの要素を持つ配列を返していましたが、もちろん配列にはプロパティがありません。それはすべきだった:
console.log($("#inputFile").get(0));
console.log($("#inputFile").get()[0]); // or this one, but that's a bit silly