私は複数のファイル入力を使用していますが、forループを使用してFileReaderを使用してファイルを反復処理しています。 JSfiddleここ:https://jsfiddle.net/zLq8rsos/。それはファイル名enの内容を正しく示していますが、なぜカウントが機能しないのか分かりません。 1つのファイルを選択すると、「1」(なぜ0ではないのですか?)という番号が付けられます。 2つのファイルを選択すると、両方とも「2」とカウントされます。私は間違って何をしていますか?forループ内の入力ファイル数をカウントする
function showDetails(file, content, n) {
var start = content.substring(0, 9);
var message = "File " + n + " is " + file.name + " and starts with " + start + " .<br>";
$('#results').append(message);
}
$(document).ready(function() {
$('#files').on('change', function(evt) {
var files = evt.target.files;
if (files) {
\t $('#results').text("");
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var content = e.target.result;
showDetails(theFile, content, i);
};
})(f);
reader.readAsText(f, "UTF-8");
}
} else {
console.log("Failed to load file(s)");
};
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="files" name="files[]" multiple>
<div id="results">
</div>
はありがとうとで始まります@ニックヒル。どうやら反復とループ内のコードの実行は2つの異なるものです。この解決策は、より多くのKISSのニックヒルに余分な関数ラッパーを追加するように見えるので、私はこれを投票しています。閉鎖は私のために新しい、面白いものです。このリンクを追加する:http://www.w3schools.com/js/js_function_closures.asp。 – Mko