Bueno, parece que el valor, o val()
, devuelto por el elemento es el nombre del único archivo seleccionado. Para solucionar este problema, que podría ser una buena idea usar la naturaleza de los eventos de varios cambios:
$('input:file[multiple]').change(
function(){
$('ul').append($('<li />').text($(this).val()));
});
JS Fiddle demo.
Y puede mostrar los nombres en una lista (como en el ejemplo) o agregar el último valor a una matriz o, posiblemente, usar/crear entradas ocultas para almacenar los nombres de archivo que mejor se adapte a su aplicación.
Para acceder a los nombres de archivo (así como la última fecha de modificación, tamaño de archivo ...) puede (probado en Chromium 12/Ubuntu 11.04) Utilice los siguientes:
$('input:file[multiple]').change(
function(e){
console.log(e.currentTarget.files);
});
JS Fiddle demo.
Editado para hacer lo anterior un poco más útil y, con suerte, demostrativa:
$('input:file[multiple]').change(
function(e){
console.log(e.currentTarget.files);
var numFiles = e.currentTarget.files.length;
for (i=0;i<numFiles;i++){
fileSize = parseInt(e.currentTarget.files[i].fileSize, 10)/1024;
filesize = Math.round(fileSize);
$('<li />').text(e.currentTarget.files[i].fileName).appendTo($('#output'));
$('<span />').addClass('filesize').text('(' + filesize + 'kb)').appendTo($('#output li:last'));
}
});
JS Fiddle demo.
El código de bloque final actualizado, debido a cambios en WebKit, Chrome 24 (aunque posiblemente desde antes), por nextgentech en los comentarios, a continuación:
$('input:file[multiple]').change(
function(e){
console.log(e.currentTarget.files);
var numFiles = e.currentTarget.files.length;
for (i=0;i<numFiles;i++){
fileSize = parseInt(e.currentTarget.files[i].size, 10)/1024;
filesize = Math.round(fileSize);
$('<li />').text(e.currentTarget.files[i].name).appendTo($('#output'));
$('<span />').addClass('filesize').text('(' + filesize + 'kb)').appendTo($('#output li:last'));
}
});
JS Fiddle demo.
Gracias David, Lo usé, pero aún así no conseguí que produjera todos los archivos, raro. Acabo de leer un artículo sobre HTML5 (http://www.html5rocks.com/en/tutorials/file/dndfiles/) que, de aplicarse, sería mucho mejor para mí. Sin duda tú, tu código realmente me ayudó con otro problema que estaba teniendo en otro lado, así que gracias ... – TheCarver
¿De verdad? Funcionó de manera consistente en Chromium, aunque eso no garantiza el comportamiento de otros navegadores. De todos modos, estoy contento de haber sido de (alguna) ayuda, si tengo la oportunidad, trataré de profundizar en esto. –
Gracias David, muy apreciado – TheCarver