2011-10-10 15 views
8

में एकाधिक फ़ाइल इनपुट प्रदर्शित करें मैं HTML5 की अद्भुत 'एकाधिक' फ़ाइल चयन सुविधा का उपयोग कर रहा हूं।एचटीएमएल 5/जेएस - div

<input type="file" id="fileInput" onChange="runTest()" multiple> 

मैं इनपुट क्षेत्र नीचे चयनित फ़ाइल नाम प्रदर्शित करने और यह सीएसएस के साथ सुंदर लग रही बनाने के लिए, लेकिन चाहते हैं ...

अगर मैं एक परीक्षण जे एस समारोह चलाने के लिए, कि 'अलर्ट' की मुझे इनपुट फ़ील्ड का मान है, यह केवल एक फ़ाइल परवाह किए बिना मुझे 10.

function runTest() { 
var fileInput = document.getElementById('fileInput').value; 
alert("You selected: "+fileInput); 
} 

मैं जब मैं एक 'एकल' फ़ाइल इनपुट क्षेत्र था और ठीक से काम किया के लिए यह कर रहा था के चयन का पता चलता है, लेकिन अब यह एक से अधिक 'है, यह नहीं करता है' टी पसंद है।

कोई सुझाव?

उत्तर

7

अच्छा, यह मान लगता है, या val(), तत्व द्वारा लौटाया गया केवल चयनित अंतिम फ़ाइल का नाम है। इस हल करने के लिए, यह बहु-परिवर्तन की घटनाओं की प्रकृति का उपयोग करने के लिहाज से हो सकता है:

$('input:file[multiple]').change(
    function(){ 
     $('ul').append($('<li />').text($(this).val())); 
    }); 

JS Fiddle demo

और या तो किसी सूची में नामों को उदाहरण के रूप में आउटपुट करें (या उदाहरण के रूप में), या संभवतः, फ़ाइल नामों को संग्रहीत करने के लिए छिपे हुए इनपुट का उपयोग/बनाएं, जैसा कि आपको लगता है कि आपके एप्लिकेशन के अनुरूप सबसे अच्छा होगा।

फ़ाइल-नाम का उपयोग करने के (और साथ ही अंतिम संशोधित तिथि, फ़ाइल आकार ...) आप (क्रोमियम 12/Ubuntu 11.04 में परीक्षण) कर सकते हैं निम्नलिखित का उपयोग करें:

$('input:file[multiple]').change(
    function(e){ 
     console.log(e.currentTarget.files); 
    }); 

JS Fiddle demo


संपादित से थोड़ा ऊपर और अधिक उपयोगी और हमें उम्मीद है कि प्रदर्शन-परक बनाने के लिए:

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

अंतिम कोड-ब्लॉक, अद्यतन वेबकिट में परिवर्तन के कारण, क्रोम 24 (हालांकि संभवतः पहले से),, nextgentech द्वारा टिप्पणी में नीचे:

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

+0

धन्यवाद डेविड, मैंने इसका इस्तेमाल किया लेकिन अभी भी सभी फाइलें, अजीब बनाने के लिए इसे प्रबंधित नहीं किया। मैंने वास्तव में एचटीएमएल 5 (http://www.html5rocks.com/en/tutorials/file/dndfiles/) पर एक लेख पढ़ा है जो लागू होता है, मेरे लिए बहुत बेहतर होगा। बिना संदेह के, 'आपके कोड ने वास्तव में मुझे किसी और मुद्दे के साथ मदद की, जहां कहीं और था, तो धन्यवाद ... – TheCarver

+0

वास्तव में? यह क्रोमियम में लगातार काम करता है, यद्यपि यह अन्य ब्राउज़रों के व्यवहार की कोई गारंटी नहीं है। वैसे भी, मुझे खुशी है कि (कुछ) मदद मिली है, अगर मुझे मौका मिलता है तो मैं कोशिश करूँगा और इसमें आगे देखूंगा। –

+0

धन्यवाद डेविड, फ़ाइल गुणों में क्रोम/क्रोमियम परिवर्तनों के लिए खाते में – TheCarver

0

अलर्ट कॉल पर ब्रेक पॉइंट सेट करें और वेरिएबल फ़ाइल इनपुट की सामग्री पर नज़र डालें, देखें कि क्या कोई अन्य संपत्ति है जिसमें सभी फ़ाइल नाम हैं।

+0

अच्छा लगता है लेकिन मेरे पास है पता नहीं है कि क्या है, खेद :) – TheCarver

0

बहुत बढ़िया कोड लेकिन वस्तु प्रत्येक परिवर्तन के लिए खाली होने की जरूरत है:

$('input:file[multiple]').change(
function(e){ 
    $('#output').empty(); 
    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')); 
     } 
}); 

आप डेविड धन्यवाद ...

+0

किसी चयनित फ़ाइल को कैसे निकालें? –