जवाबों:
उस नोड को निकालने के बारे में कैसे, उसी नाम के साथ एक नया बनाना?
जावास्क्रिप्ट के साथ फ़ाइल इनपुट को साफ़ करने के 3 तरीके हैं:
रिक्त या रिक्त मान सेट करें।
IE11 + और अन्य आधुनिक ब्राउज़रों के लिए काम करता है।
एक नया फ़ाइल इनपुट तत्व बनाएं और पुराने को बदल दें।
नुकसान यह है कि आप घटना श्रोताओं और विस्तारक गुणों को खो देंगे।
Form.reset () विधि के माध्यम से स्वामी फ़ॉर्म को रीसेट करें।
एक ही मालिक रूप में अन्य इनपुट तत्वों को प्रभावित करने से बचने के लिए, हम एक नया खाली फ़ॉर्म बना सकते हैं और फ़ाइल इनपुट तत्व को इस नए रूप में जोड़ सकते हैं और इसे रीसेट कर सकते हैं। यह तरीका सभी ब्राउज़रों के लिए काम करता है।
मैंने एक जावास्क्रिप्ट फ़ंक्शन लिखा। डेमो: http://jsbin.com/muhipoye/1/
function clearInputFile(f){
if(f.value){
try{
f.value = ''; //for IE11, latest Chrome/Firefox/Opera...
}catch(err){ }
if(f.value){ //for IE5 ~ IE10
var form = document.createElement('form'),
parentNode = f.parentNode, ref = f.nextSibling;
form.appendChild(f);
form.reset();
parentNode.insertBefore(f,ref);
}
}
}
tl; dr : आधुनिक ब्राउज़रों के लिए, बस उपयोग करें
input.value = '';
कैसा रहेगा:
input.type = "text";
input.type = "file";
मुझे अभी भी समझना है कि यह वेबकिट के साथ काम क्यों नहीं करता है ।
वैसे भी, यह IE9>, फ़ायरफ़ॉक्स और ओपेरा के साथ काम करता है।
वेबकिट के साथ स्थिति यह है कि मैं इसे फ़ाइल में वापस बदलने में असमर्थ प्रतीत होता हूं।
IE8 के साथ, स्थिति यह है कि यह एक सुरक्षा अपवाद को फेंकता है।
संपादित करें: वेबकिट, ओपेरा और फ़ायरफ़ॉक्स इस काम करता है के लिए, हालांकि:
input.value = '';
(इस प्रस्ताव के साथ उपरोक्त उत्तर की जाँच करें)
मैं देखूंगा कि क्या मुझे जीसी की आवश्यकता के बिना इस क्रॉस-ब्राउज़र को करने का एक अच्छा क्लीनर तरीका मिल सकता है।
EDIT2:
try{
inputs[i].value = '';
if(inputs[i].value){
inputs[i].type = "text";
inputs[i].type = "file";
}
}catch(e){}
अधिकांश ब्राउज़रों के साथ काम करता है। IE <9 के साथ काम नहीं करता है, यह सब है।
फ़ायरफ़ॉक्स 20, क्रोम 24, ओपेरा 12, IE7, IE8, IE9 और IE10 पर परीक्षण किया गया।
''सभी ब्राउज़र में काम नहीं करने के लिए मान सेट करना ।
इसके बजाय मान को सेट करने का प्रयास nullकरें:
document.getElementById('your_input_id').value= null;
संपादित करें: मैं की इजाजत दी जे एस फ़ाइल इनपुट सेट करने के लिए नहीं करने के लिए बहुत वैध सुरक्षा कारणों से मिलता है, लेकिन यह के लिए एक सरल प्रणाली प्रदान करने के लिए उचित प्रतीत होता है समाशोधन पहले से ही उत्पादन का चयन। मैंने एक खाली स्ट्रिंग का उपयोग करने की कोशिश की, लेकिन यह सभी ब्राउज़रों में काम नहीं किया, उन सभी ब्राउज़रों में NULLकाम किया जो मैंने कोशिश की थी (ओपेरा, क्रोम, एफएफ, IE11 + और सफारी)।
संपादित करें: कृपया ध्यान दें कि NULLखाली स्ट्रिंग पर सेट करते समय सभी ब्राउज़रों पर काम करना बंद नहीं हुआ।
all browsers... यह IE8, IE9 या IE10 में काम नहीं करता है (लेकिन IE11 में काम करता है)।
दुर्भाग्य से उपरोक्त उत्तर में से कोई भी सभी ठिकानों को कवर नहीं करता है - कम से कम वेनिला जावास्क्रिप्ट के साथ मेरे परीक्षण के साथ नहीं।
.value = nullफायरफॉक्स, चोम, ओपेरा और IE11 पर काम करने के लिए प्रकट होता है (लेकिन IE8 / 9/10 नहीं )
.cloneNode.clone()फायरफॉक्स पर (और jQuery में) .valueओवर की नकल करने के लिए प्रकट होता है , इसलिए क्लोन को व्यर्थ बना देता है।
तो यहाँ वेनिला जावास्क्रिप्ट फ़ंक्शन है जो मैंने लिखा है कि फ़ायरफ़ॉक्स (27 और 28), क्रोम (33), IE (8, 9, 10, 11), ओपेरा (17) पर काम करता है ... ये केवल वर्तमान में उपलब्ध ब्राउज़र हैं मेरे साथ परीक्षण करने के लिए।
function clearFileInput(ctrl) {
try {
ctrl.value = null;
} catch(ex) { }
if (ctrl.value) {
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
}
}
ctrlइसलिए समारोह के रूप में कहा जा सकता है पैरामीटर, फ़ाइल इनपुट ही है ...
clearFileInput(document.getElementById("myFileInput"));
ifकथन को catchब्लॉक के अंदर नहीं रखा जाना चाहिए ?
null। फिर ctrl.value = null;एक try...catchब्लॉक के अंदर डालने की बात क्या है ? नए प्रश्न के लिए क्षमा करें।
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);- वास्तव में हम किस मूल्य पर मूल्य को स्पष्ट करते हैं, क्योंकि cloneNodeयह भी इसे कॉपी करता है?
निम्न कोड ने मेरे लिए jQuery के साथ काम किया। यह हर ब्राउज़र में काम करता है और घटनाओं और कस्टम गुणों को संरक्षित करने की अनुमति देता है।
var $el = $('#your-input-id');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
कोड और प्रदर्शन के लिए इस jsField को देखें ।
U को नए फ़ाइल इनपुट के साथ बदलने की आवश्यकता है। यहाँ है कि यह jQuery के साथ कैसे किया जा सकता है:
var inputFile = $('input[type=field]');
inputFile.wrap('<div />');
और जब आप इनपुट फ़ील्ड (उदाहरण के लिए किसी घटना पर) को साफ़ करने की आवश्यकता हो तो इस लाइन का उपयोग करें:
inputFile.parent().html( inputFile.parent().html() );
document.getElementById('your_input_id').value=''
संपादित करें:
यह IE और ओपेरा में काम नहीं करता है, लेकिन फ़ायरफ़ॉक्स, सफारी और क्रोम के लिए काम करता है।
मुझे भी यही समस्या हो रही थी और मैं इसे लेकर आया था।
var file = document.querySelector('input');
var emptyFile = document.createElement('input');
emptyFile.type = 'file';
document.querySelector('button').onclick = function(){
file.files = emptyFile.files;
}
<input type='file'>
<button>clear</button>
यह वास्तव में काफी आसान है।
document.querySelector('#input-field').value = '';
मैं HTML फ़ाइल इनपुट को साफ करने के लिए सरल और स्वच्छ तरीके की तलाश में हूं, उपरोक्त उत्तर बहुत अच्छे हैं, लेकिन उनमें से कोई भी वास्तव में जवाब नहीं देता है कि मैं क्या देख रहा हूं, जब तक कि मैं वेब पर सरल तरीके से इसे करने के लिए नहीं आया हूं:
var $input = $("#control");
$input.replaceWith($input.val('').clone(true));
सारा श्रेय क्रिस कॉयर को जाता है ।
// Referneces
var control = $("#control"),
clearBn = $("#clear");
// Setup the clear functionality
clearBn.on("click", function(){
control.replaceWith( control.val('').clone( true ) );
});
// Some bound handlers to preserve when cloning
control.on({
change: function(){ console.log( "Changed" ) },
focus: function(){ console.log( "Focus" ) }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="control">
<br><br>
<a href="#" id="clear">Clear</a>
उपरोक्त उत्तर निम्नलिखित कारणों के लिए कुछ अनाड़ी समाधान प्रस्तुत करते हैं:
मैं करने के लिए होने की तरह नहीं है और फिर एचटीएमएल हो रही है, यह बहुत शामिल और गंदा है।wrapinput
क्रॉस ब्राउज़र JS आसान है और ऐसा लगता है कि इस मामले में typeस्विच करने के लिए मज़बूती से उपयोग करने के लिए बहुत सारे अज्ञात हैं (जो, फिर से, थोड़ा गंदा है) और करने के valueलिए सेटिंग''
इसलिए मैं आपको अपना jQuery आधारित समाधान प्रदान करता हूं:
$('#myinput').replaceWith($('#myinput').clone())
यह वही करता है जो यह कहता है, यह इनपुट को स्वयं के क्लोन के साथ बदल देता है। क्लोन में फ़ाइल चयनित नहीं होगी।
लाभ:
परिणाम: हैप्पी प्रोग्रामर
Cross browser compatibility... मेरे परीक्षण से पता चलता है कि फ़ायरफ़ॉक्स के .valueहिस्से के रूप में कॉपी करता है .clone(), इसलिए इसे बेकार प्रदान करता है
replaceWith? मैं clone()अपने आप का उपयोग कर रहा हूं और यह फ़ायरफ़ॉक्स में ठीक काम कर रहा है (मुझे नहीं पता कि यह अभी भी आपके लिए एक साल बाद मामला है =))
मुझे क्या मदद मिली, मैंने कतार से बाहर निकलने के बजाय एक लूप का उपयोग करके अंतिम चयनित फ़ाइल को लाने और अपलोड करने की कोशिश की, और यह काम कर गया। यहाँ कोड है।
for (int i = 0; i <= Request.Files.Count-1; i++)
{
HttpPostedFileBase uploadfile = files[i];
Stream fs = uploadfile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] imageBytes = br.ReadBytes((Int32)fs.Length);
}
आशा है कि यह कुछ मदद कर सकता है।
मैंने अधिकांश समाधानों की कोशिश की लेकिन किसी के काम नहीं आया। हालाँकि मुझे इसके लिए नीचे एक चक्कर लगा पाया।
प्रपत्र की संरचना है: form=> label, inputऔरsubmit button । जब हम एक फ़ाइल चुनते हैं, तो फ़ाइलनाम लेबल द्वारा मैन्युअल रूप से जावास्क्रिप्ट में ऐसा करके दिखाया जाएगा।
इसलिए मेरी रणनीति यह है: शुरू में सबमिट buttonको अक्षम कर दिया जाए, एक फ़ाइल चुने जाने के बाद, सबमिट बटन disabledविशेषता को हटा दिया जाएगा, जैसे कि मैं फ़ाइल सबमिट कर सकता हूं। सबमिट करने के बाद, मैं स्पष्ट करता हूं labelकि इससे ऐसा लगता है जैसे मैंने फाइल को साफ कर दिया हैinput लेकिन वास्तव में ऐसा नहीं है। फिर मैं फ़ॉर्म सबमिट करने से रोकने के लिए सबमिट बटन को फिर से अक्षम कर दूंगा।
सबमिट button disableया नहीं सेट करके , मैं फ़ाइल को कई बार सबमिट करने से रोकता हूं जब तक कि मैं दूसरी फ़ाइल नहीं चुनता।
मैं setAttribute का उपयोग करके फ़ाइल टाइप करने के लिए पाठ और वापस टाइप करने के लिए बदल गया
'<input file-model="thefilePic" style="width:95%;" type="file" name="file" id="filepicture" accept="image/jpeg" />'
'var input=document.querySelector('#filepicture');'
if(input != null)
{
input.setAttribute("type", "text");
input.setAttribute("type", "file");
}