这是我的代码:
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' 在我第一次上传某些东西时接收到一个正常值。在第二次尝试时,它开始复制传入的值。
如果我先上传了 1 个文件,试试就可以了。第二次我会得到 2 个相同的文件。第三个 4 个文件,exetera。
为什么会这样?
升级版:
更多解释: 发生了什么:我上传 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 'click' 中有我的函数。发生的事情是每次我按下输入按钮时,它都会收到额外的“更改”侦听器。
我将输入的 .addListener 更改为 .addListenerOnce。