Cóż, wygląda na to, że wartość, lub val()
, zwrócona przez element jest nazwą tylko ostatniego wybranego pliku. Aby obejść ten problem, to może być mądry, aby skorzystać z charakterem wydarzeń wielu zmian:
$('input:file[multiple]').change(
function(){
$('ul').append($('<li />').text($(this).val()));
});
JS Fiddle demo.
I wypisz nazwy do listy (jak w przykładzie) lub dołącz ostatnią wartość do tablicy lub ewentualnie użyj/utwórz ukryte dane wejściowe do przechowywania nazw plików, które według Ciebie najlepiej pasują do Twojej aplikacji.
dostępu do pliku-nazwy (jak ostatnia data modyfikacji, rozmiar plików, ...) można (testowane w Chromium 12/Ubuntu 11.04) należy stosować następujące:
$('input:file[multiple]').change(
function(e){
console.log(e.currentTarget.files);
});
JS Fiddle demo.
Zmieniano aby powyższe nieco bardziej użyteczny i, miejmy nadzieję, poglądowe:
$('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.
Ostateczny kod blok zaktualizowane, ze względu na zmiany w Webkit, Chrome 24 (choć być może z wcześniej), przez nextgentech w komentarzach poniżej:
$('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.
Dzięki David, Użyłem tego, ale nadal nie udało mi się zmusić go do wyprodukowania wszystkich plików, dziwne. Właśnie przeczytałem artykuł na temat HTML5 (http://www.html5rocks.com/en/tutorials/file/dndfiles/), który, jeśli zostanie zastosowany, byłby dla mnie znacznie lepszy. Bez wątpienia, twój kod faktycznie pomógł mi z innym problemem, który miałem gdzie indziej, więc dzięki ... – TheCarver
Naprawdę? Działał konsekwentnie w Chromium, ale nie gwarantuje to zachowania innych przeglądarek. W każdym razie cieszę się, że mogłem (trochę) pomóc, jeśli dostanę szansę, postaram się zajrzeć dalej. –
Dzięki David, bardzo doceniany – TheCarver