7

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

$(':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);
    });

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

*未捕获的类型错误:无法读取未定义的属性“名称”*

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

名称 = 文件名,

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

4

3 回答 3

7

这种类型的错误意味着您的容器变量file未定义。

您应该console.log在不同的地方使用以查看定义的内容和未定义的内容(您的文件数组等)

还 :

for(x=0;x<=this.files.length;x++)

对于最后一个值将是未定义的x,因为数组的最后一个元素是 atarray.length - 1而不是array.length,这会在循环结束时为您提供未定义的值,这可能是您的错误的根源。在您的情况下,x 转到值this.files.length 另外,请始终使用 var,否则您x将成为全局变量,这可能是另一个问题来源。

正确的循环应该是:

for (var x = 0; x < this.files.length; x++)
于 2013-07-17T10:37:12.847 回答
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++){}

它可能会起作用!

于 2013-09-04T09:35:49.423 回答
1

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

于 2018-03-14T12:19:39.187 回答