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);
    });

しかし、突然、次のエラーが表示されます。

* Uncaught TypeError: 未定義のプロパティ 'name' を読み取れません *

その周りのコードを除いて、何も変更されていません。それは次を指しています:

名前 = ファイル名、

ここで何が問題なのか教えてもらえますか?

4

3 に答える 3

7

このタイプのエラーは、コンテナ変数fileが定義されていないことを意味します。

console.log定義されているものと定義されていないもの (ファイル配列など) を確認するには、さまざまな場所で使用する必要があります。

また :

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

x配列の最後の要素が at でarray.length - 1あり、 notであるため、最後の値に対しては未定義になり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 に答える