I have the following code for clicking the "Select File" button:
$(':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>"); } });
Okay right? And everything works well. This is great, except that when jQuery adds table rows, it seems like it starts a new table and the top <thead> not bound to rows (in Chrome).
Ok, I thought we’ll just build a line and run everything right away.
In this way:
$(':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); });
But now all of a sudden, I get the following error:
* Uncaught TypeError: Unable to read the 'name' property from undefined *
Nothing has changed except the code around it. He points to:
name = file.name,
Can you tell me what the problem is?
source share