2012-05-22 16 views
27

Tôi có <input type="file" id="basicUploadFile" multiple="multiple"> và tôi muốn nhận tất cả tên tệp trong đầu vào này. Tôi đã nhìn thấy một số ví dụ, nhưng nó chỉ có tên của tập tin đầu tiên.JQuery - nhận tất cả các tệpNames bên trong đầu vào = 'tệp'

$ ('#basicUploadFile').live ('change', function() { 
    alert($ ('#basicUploadFile').val()); 
}); 

Tôi làm cách nào để thực hiện việc này? Cảm ơn.

+2

http://stackoverflow.com/questions/6171013/javascript-get-number- of-files-and-their-filenames-from-input-multiple-elemen –

+2

Bản sao chính xác của câu hỏi này: http://stackoverflow.com/questions/3654179/retrieving-file-names-out-of-a-multi- file-upload-control-with-javascript – Tr1stan

Trả lời

63
var files = $('#basicUploadFile').prop("files") 

files sẽ là đối tượng FileList.

var names = $.map(files, function(val) { return val.name; }); 

Bây giờ names là một mảng của chuỗi (tên file)

FileAPI reference
files property reference

+3

Trình diễn tốt các phương thức '.prop()' và '$ .map()' mà tôi không biết. :) – Richard

+1

Điều này không hoạt động trong IE. – Oddman

+2

Có, hỗ trợ cho nhiều thuộc tính chỉ xuất hiện trong IE10. – wrock

9

jsFiddle Demo


Bạn vẫn có thể truy cập các tập tin như một bộ sưu tập FileList mà không có sự cần sử dụng quá mức jQuery. Tôi đã tạo nhanh jsFiddle minh họa cách lấy thông tin ra khỏi đầu vào bằng cách sử dụng các đối tượng FileListFile. Dưới đây là một đoạn trích:

$('#basicUploadFile').live('change', function() 
{ 
    for (var i = 0; i < this.files.length; i++) 
    { 
     alert(this.files[i].name); 
     alert(this.files.item(i).name); // alternatively 
    } 
}); 
+0

bạn có thể giải thích một chút tại sao sử dụng "this" thay vì "$ (this)" – atif

+1

'$ (this)' sẽ đơn giản cung cấp cho chúng ta một jQuery wrapper cho đối tượng 'this', trong một số trường hợp sẽ hữu ích vì nó sẽ trưng ra một số phương thức, tuy nhiên trong trường hợp này nó không cần thiết. – Richard

+0

tính năng này không hoạt động trong IE - IE không cho phép bạn truy cập vào danh sách tệp. – Oddman

0
<input name="selectAttachment" id="selectAttachment" type="file" multiple="multiple"> 
<button class="btn btn-default" onclick="uploadAttachment()" type="submit">Upload</button> 


function uploadAttachment() { 
       debugger; 
       var files = $('#selectAttachment').prop('files'); 
       var names = $.map(files, function (val) { return val.name; }); 
      } 
1

Tôi sử dụng này để hiển thị trong giao diện điều khiển tất cả các tên tập tin:

var input_file = $("#input_file"); 
input_file.on("change", function() { 
    var files = input_file.prop("files") 
    var names = $.map(files, function (val) { return val.name; }); 
    $.each(names, function (i, name) { 
      console.log(name); 
    }); 
}); 
Các vấn đề liên quan