点击“选择文件”时,我有以下代码:
$(':file').change(function () {
if(this.files.length == 1) {
$('#selected_files').html("<h4>Attaching " + this.files.length + " file</h4>");
} else {
$('#selected_files').html("<h4>Attaching " + this.files.length + " files</h4>");
}
$('#selected_files').append("<table class=\"altShaded\"><thead><tr><td></td><td>Filename</td><td>Size</td></tr></thead>");
for(x=0;x<=this.files.length;x++)
{
var file = this.files[x],
name = file.name,
size = file.size,
type = file.type;
$('#selected_files').append("<tr><td></td><td><b>" + name + "</b> ("+filesize(size)+") " + type + "<br>");
}
});
很好,对吗?一切顺利。这很好,除了当jQuery附加表格行时,它似乎想要开始一个新表格,并且顶部<thead>
没有附加到行(在Chrome中)。
好的,我想,我们只需要构建一个字符串并立即将其全部放入。
因此:
$(':file').change(function () {
if(this.files.length == 1) {
var displayFiles = "<h4>Attaching " + this.files.length + " file</h4>";
} else {
var displayFiles = "<h4>Attaching " + this.files.length + " files</h4>";
}
var displayFiles = displayFiles + "<table class=\"altShaded\"><thead><tr><td></td><td>Filename</td><td>Size</td></tr></thead>";
for(x=0;x<=this.files.length;x++)
{
var file = this.files[x],
name = file.name,
size = file.size,
type = file.type;
displayFiles = displayFiles + "<tr><td>" + type + "</td><td><b>" + name + "</b></td><td>"+filesize(size)+"</td></tr>";
}
$('#selected_files').html(displayFiles);
});
但现在突然间,我收到以下错误:
* 未捕获的TypeError:无法读取未定义的属性'name'*
除了围绕它的代码外,什么都没有改变。它指向:
name = file.name,
你能告诉我这里的问题是什么吗?
答案 0 :(得分:6)
此类错误意味着您的容器变量file
未定义。
您应该在不同的地方使用console.log
来查看定义的内容和不定义的内容(您的文件数组等)
另外:
for(x=0;x<=this.files.length;x++)
对于最后一个x
值将未定义,因为数组的最后一个元素位于array.length - 1
而不是array.length
,这会在循环结束时为您提供未定义的值,可能是你的错误的来源。在您的情况下,x转到值this.files.length
此外,始终使用var,否则您的x
将是一个全局变量,这可能是问题的另一个来源。
正确的循环应该是:
for (var x = 0; x < this.files.length; x++)
答案 1 :(得分:1)
以下是有问题的代码,
for (var index = 0; index <= results.length; index++) {
//doSumthing
}
工作代码,
for (var index = 0; index < results.length; index++) {
//doSumthing
}
问题出在=
循环语句中的for
运算符。它正在检查数组中不存在的元素(最后一个元素+ 1)。
尝试从循环语句中删除=
,如下所示。
for(var x = 0; x < this.files.length; x++){}
它可能有效!
答案 2 :(得分:1)
我遇到了同样的错误,因为一个愚蠢的错误而发生了这件事。 我从导入数组中移除了模块,并意外地在该行上留下了逗号.....所以导入中有两个逗号(,,):[] array ....删除一个逗号后它解决了问题。