これは私のコードです:
var rowData = [];
var showFiles = function () {
var input = document.getElementById('doc-upload');
if (input.files.length > 0) {
for (var i = 0; i < input.files.length; i += 1) {
rowData.push([input.files[i].name]);
};
console.log(rowData);
};
};
document.getElementById('doc-upload').addEventListener('change', showFiles, this);
'rowData'は、何かをアップロードするときに初めて通常の値を受け取ります。2回目の試行で、着信値の複製が開始されます。
最初に1つのファイルをアップロードした場合は、問題ありません。2回目は、2つの同じファイルを取得しました。3番目の4つのファイル、exetera。
なぜこれが起こっているのですか?
UPD:
詳細な説明:何が起こっているのか:x.docをアップロードします私の配列は[x.doc]ですが、y.docをアップロードしたいと思います。y.docを選択すると、配列が[x.doc、y.doc、y.doc]に変わり、z.docをアップロードすると、aarayは[x.doc、y.doc、y.doc、zのようになります。 doc、z.doc、z.doc、z.doc]。等々。それは長さのプロパティで何かをしなければなりません、私はそれをどうにかして台無しにしました。
UPD2:
これで、コードのフルバージョンが次のようになります。
//file upload
var rowData = [];
docAddButton.addListener('click', function () {
var showFiles = function () {
var input = document.getElementById('doc-upload');
if (input.files.length > 0) {
for (var i = 0; i < input.files.length; i += 1) {
if (rowData.indexOf(true, input.files[i].name, Math.round(input.files[i].size * 0.001) + ' кб') === -1) {
rowData.push([
true,
input.files[i].name,
Math.round(input.files[i].size * 0.001) + ' кб'
]);
}
}
console.log(rowData);
tableModel.setData(rowData);
};
};
document.getElementById('doc-upload').addEventListener('change', showFiles, this);
});
助けてくれたすべての人に感謝します!
解決策:UPD2から、eventListenerの「クリック」内に関数があることがわかります。何が起こっていたのかというと、入力ボタンを押すたびに、余分な「変更」リスナーを受信していました。
入力用の.addListenerを.addListenerOnceに変更しました。