Vâng, có vẻ như giá trị hoặc val()
, được trả về bởi phần tử là tên của tệp được chọn cuối cùng. Để giải quyết vấn đề này, bạn nên sử dụng bản chất của các sự kiện nhiều thay đổi:
$('input:file[multiple]').change(
function(){
$('ul').append($('<li />').text($(this).val()));
});
JS Fiddle demo.
Và nhập tên vào danh sách (như trong ví dụ) hoặc thêm giá trị mới nhất vào mảng hoặc có thể sử dụng/tạo đầu vào bị ẩn để lưu trữ tên tệp như bạn cảm thấy phù hợp nhất với ứng dụng của bạn.
Để truy cập vào tập tin tên (cũng như ngày sửa đổi cuối cùng, tập tin có kích thước ...) bạn có thể (thử nghiệm trong Chromium 12/Ubuntu 11.04) sử dụng như sau:
$('input:file[multiple]').change(
function(e){
console.log(e.currentTarget.files);
});
JS Fiddle demo.
Sửa để làm cho trên hơi hữu ích hơn, và hy vọng, minh chứng:
$('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.
Các thức mã khối được cập nhật, do sự thay đổi trong Webkit, Chrome 24 (mặc dù có thể từ trước đó), bởi nextgentech trong ý kiến, bên dưới:
$('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.
Nguồn
2011-10-10 22:20:00
Cảm ơn David, Tôi đã sử dụng điều này nhưng vẫn không quản lý để sản xuất tất cả các tệp, lạ. Tôi đã thực sự chỉ cần đọc một bài viết trên HTML5 (http://www.html5rocks.com/en/tutorials/file/dndfiles/) mà nếu áp dụng, sẽ tốt hơn cho tôi. Không nghi ngờ gì, mã của bạn thực sự đã giúp tôi với một vấn đề khác mà tôi đã gặp phải ở nơi khác, vì vậy cảm ơn ... – TheCarver
Thật sao? Nó hoạt động nhất quán trong Chromium, mặc dù không đảm bảo về hành vi của các trình duyệt khác. Dù sao, tôi vui vì đã được (một số) giúp đỡ, nếu tôi có cơ hội tôi sẽ cố gắng và nhìn sâu hơn vào điều này. –
Cảm ơn David, đã đánh giá cao – TheCarver