2011-05-29 9 views
38

मेरे पास multiple="multiple" विशेषता के साथ एक फ़ाइल इनपुट है जो उपयोगकर्ताओं को एक साथ कई फाइलों का चयन करने की अनुमति देता है। मैं अपलोड करने से पहले चयनित फ़ाइल नाम और उनकी गिनती प्रदर्शित करना चाहता हूं, हालांकि मुझे यकीन नहीं है कि जावास्क्रिप्ट का उपयोग करके फ़ाइल इनपुट तत्व से यह जानकारी कैसे प्राप्त करें?जावास्क्रिप्ट को एकाधिक गुणों के साथ फ़ाइल इनपुट तत्व से फ़ाइलों और उनके फ़ाइल नामों की संख्या मिलती है?

<input type="file" id="fileElementId" name="files[]" size="20" multiple="multiple" /> 

मैं इस की कोशिश की है:

document.getElementById('fileElementId').value 

लेकिन यह केवल रिटर्न एक फ़ाइल नाम जब मैं एकाधिक फ़ाइलों का चयन। जावास्क्रिप्ट का उपयोग करना है कि मैं multiple विशेषता के साथ फ़ाइल इनपुट तत्व से चयनित फ़ाइलों और उनके नामों की संख्या को कैसे पुनर्प्राप्त करूं?

उत्तर

64

कि एचटीएमएल 5 फ़ाइल सामान का समर्थन नए ब्राउज़रों में, अपने <input> तत्व एक "फ़ाइलें" संपत्ति होगा। इससे आपको "फाइललिस्ट" संदर्भ मिलेगा, जिसमें "लम्बाई" संपत्ति होगी। "फ़ाइललिस्ट" उदाहरण पर ".item()" नामक एक एक्सेस विधि भी है, और व्यक्तिगत "फ़ाइल" तत्वों तक पहुंचने के लिए यह एक पूर्णांक तर्क लेता है। उनके पास ".name" संपत्ति है।

तो:

var inp = document.getElementById('fileElementId'); 
for (var i = 0; i < inp.files.length; ++i) { 
    var name = inp.files.item(i).name; 
    alert("here is a file name: " + name); 
} 

निश्चित रूप से हो जाएगा ताकि पुराने आईई संस्करण में नहीं काम करते हैं, और मैं भी यकीन है कि कैसे पूरी तरह से सफारी और क्रोम समर्थन है नहीं कर रहा हूँ; हालांकि, यदि आप अपने फ़ाइल इनपुट पर "एकाधिक" सेट वाले पेज लिख रहे हैं, तो आप पहले से किनारे पर नृत्य कर रहे हैं :-)

+1

फ़ायरफ़ॉक्स 3.6+, क्रोम 2+, सफारी 4+, ओपेरा 11+ इत्यादि में कई काम करता है तो हाँ - कहीं भी आईई को छोड़कर (आईई 9 भी नहीं)। मेरे लिए लोगों को फ्लैश कुकी बग फिक्स करके सत्र निर्धारण समस्या को पेश करने से अपने ब्राउज़र को अपग्रेड करना आसान है, क्योंकि केवल व्यवहार्य विकल्प फ़्लैश अपलोडर है। हालांकि – Stann

+0

धन्यवाद। यह क्रोम, फ़ायरफ़ॉक्स, ओपेरा, सफारी में मेरे लिए काम किया। निश्चित रूप से आईई है कचरे के ढेर में बुरी तरह विफल रहता है। :) lol – Stann

+4

FWIW अगर आपको फ़ाइलों के आकार की आवश्यकता है: 'fileSize = inp.files.item (i) .size' – gordon

21

यह untested है, लेकिन आप की कोशिश कर सकते:

$('#fileElementId').get(0).files; 

या

document.getElementById('fileElementId').files; 
+15

आप इसका परीक्षण क्यों नहीं करते हैं और हमें बताते हैं कि यह – Ibu

+3

@lbu: मुझे नहीं लगता कि यह क्यों नहीं होगा। मुख्य बात यह है - "फाइलें" तत्व संपत्ति। और भी - हाँ - मैंने चेक किया - यह या तो jquery या कच्चे तरीके से काम करता है। – Stann

+4

$ ('# fileElementId')। (0)। फाइलें केवल ऑब्जेक्ट लौटाती हैं। इसके बजाय $ ('# fileElementId') का उपयोग करें। (0) .files.length प्राप्त करें। –

0

दूसरा उत्तर गलत था।

उत्तर के बजाय document.getElementById('fileElementId').files.length; होना चाहिए।

संबंधित मुद्दे