2012-05-22 12 views
27

Ich habe <input type="file" id="basicUploadFile" multiple="multiple"> und ich möchte alle Dateinamen in diesem Eingang erhalten. Ich habe ein Beispiel gesehen, aber es bekommt nur den Namen der ersten Datei.JQuery - alle fileNames in Eingang erhalten = 'Datei'

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

Wie kann ich das tun? Vielen Dank.

+2

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

+2

Genaues Duplikat dieser Frage: http://stackoverflow.com/questions/3654179/retrieving-file-names-out-of-a-multi- file-upload-control-with-javascript – Tr1stan

Antwort

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

files wird ein Filelist-Objekt sein.

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

Jetzt names ist ein Array von Strings (Dateinamen)

FileAPI reference
files property reference

+3

Gute Demonstration der '.prop()' und '$ .map()' Methoden, die mir nicht bekannt waren. :) – Richard

+1

Dies funktioniert nicht in IE. – Oddman

+2

Ja, die Unterstützung für das Multiple-Attribut wurde nur in IE10 angezeigt. – wrock

9

jsFiddle Demo


Sie noch die Dateien als FileList Sammlung ohne die zugreifen können Notwendigkeit für die übermäßige Verwendung jQuery. Ich habe eine schnelle jsFiddle erstellt, die demonstriert, wie man die Information aus der Eingabe mit den FileList und File Objekten erhält. Hier ist ein Ausschnitt:

$('#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

können Sie bitte ein wenig erklären warum die Verwendung von "this" anstelle von "$ (this)" – atif

+1

'$ (this)' würde uns einfach einen jQuery-Wrapper für das Objekt 'this' liefern, was in manchen Fällen hilfreich wäre, da es bestimmte Methoden offen legen würde, In diesem Fall ist es jedoch unnötig. – Richard

+0

dies funktioniert nicht in IE - IE erlaubt Ihnen keinen Zugriff auf die Liste der Dateien. – 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

ich benutzten in der Konsole alle Dateien Namen zeigen:

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); 
    }); 
});