未捕获的TypeError:无法读取未定义的属性“name”

单击“选择文件”时,我有以下代码:

$(':file').change(function () { if(this.files.length == 1) { $('#selected_files').html("

Attaching " + this.files.length + " file

"); } else { $('#selected_files').html("

Attaching " + this.files.length + " files

"); } $('#selected_files').append(""); 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("附加到行(在Chrome中)。

好吧,我想,我们只需要构建一个字符串并立即将其全部放入。

从而:

 $(':file').change(function () { if(this.files.length == 1) { var displayFiles = "

Attaching " + this.files.length + " file

"; } else { var displayFiles = "

Attaching " + this.files.length + " files

"; } var displayFiles = displayFiles + "
FilenameSize
" + name + " ("+filesize(size)+") " + type + "
"); } });

好吧,对吗? 一切顺利。 这很好,除了当jQuery附加表行时,它似乎想要开始一个新表,并且顶部的

"; for(x=0;x<=this.files.length;x++) { var file = this.files[x], name = file.name, size = file.size, type = file.type; displayFiles = displayFiles + ""; } $('#selected_files').html(displayFiles); });

但是现在突然间,我收到以下错误:

* 未捕获的TypeError:无法读取未定义的属性’name’*

除了围绕它的代码之外,什么都没有改变。 它指向:

name = file.name,

你能告诉我这里的问题是什么吗?

此类错误意味着未定义容器变量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++) 

这是有问题的代码,

 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++){} 

它可能会奏效!

我有同样的错误,因为一个愚蠢的错误而发生了。 我从导入数组中删除了模块,并意外地在该行上留下了逗号…..所以在导入中有两个逗号(,,):[] array ….删除一个逗号后它解决了问题。

FilenameSize
" + type + "" + name + ""+filesize(size)+"