【发布时间】:2013-02-06 10:08:20
【问题描述】:
这是我的代码:
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。
【问题讨论】:
-
"
rowData.push([input.files[i].name]);" 为什么要将文件名作为 array 推送?我预计只有rowData.push(input.files[i].name);(没有[和]大约input.files[i].name)。 -
这是由于我使用的数组结构。 rowData 用于设置表格的模型,数组是表格的一行。我推送的每个下一个数组都将是表中的下一行。 [input.files[i].name] 中的每个元素都将是下一列。例如 [input.files[i].name, input.files[i].size]。我只是剪掉了这些东西来在这里显示代码。
标签: javascript arrays file input