Uncaught TypeError: kan eigenschap ‘naam’ van undefined niet lezen

Ik heb de volgende code voor als er op ‘kies bestand’ wordt geklikt:

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

Prima, toch? En alles werkt goed. Dat is geweldig, behalve dat wanneer jQuery de tabelrijen toevoegt, het lijkt alsof het een nieuwe tabel wil starten, en de bovenste <thead>is niet gekoppeld aan de rijen (in Chrome).

Oké, ik dacht, we bouwen gewoon een string en stoppen die er allemaal tegelijk in.

Dus:

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

Maar nu krijg ik ineens de volgende foutmelding:

*Uncaught TypeError: kan eigenschap ‘naam’ van undefined * niet lezen

Er is niets veranderd, behalve de code eromheen. Het wijst naar:

naam = bestandsnaam,

Kun je me vertellen wat hier het probleem is?


Antwoord 1, autoriteit 100%

Dit type fout betekent dat uw containervariabele fileniet is gedefinieerd.

U moet console.logop verschillende plaatsen gebruiken om te zien wat is gedefinieerd en wat niet (uw bestandenarray, enz.)

Ook :

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

Zal niet gedefinieerd zijn voor de laatste xwaarde, omdat het laatste element van een array zich op array.length - 1bevindt en niet array.length, die u een ongedefinieerde waarde geeft aan het einde van uw lus, waarschijnlijk de bron van uw fout. In jouw geval gaat x naar de waarde this.files.length
Gebruik ook altijd var, anders wordt je xeen globale variabele, wat een andere bron van problemen kan zijn.

Een correcte lus zou moeten zijn:

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

Antwoord 2, autoriteit 14%

Ik had dezelfde fout en het gebeurde vanwege een stomme fout.
Ik heb de module uit de importarray verwijderd en per ongeluk een komma op die regel gelaten…..dus er waren twee komma’s (,,) in de import: [] array….na het verwijderen van één komma was het probleem opgelost.


Antwoord 3, autoriteit 14%

Hier is de code met het probleem,

for (var index = 0; index <= results.length; index++) {
//doSumthing
}

Werkcode ,

for (var index = 0; index < results.length; index++) {
//doSumthing
}

Het probleem zat in de operator =in de for-lusinstructie. Er werd gecontroleerd op het element dat niet bestaat (laatste element+1) in de array.

Probeer op deze manier =uit uw loop-statement te verwijderen.

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

Het zou kunnen werken!

Other episodes