আমি কীভাবে জাভাস্ক্রিপ্ট সহ এইচটিএমএল ফাইল ইনপুট সাফ করতে পারি?


154

আমি আমার ফর্মটিতে ফাইল ইনপুট সাফ করতে চাই।

উত্সগুলি একই পদ্ধতিতে সেট করা সম্পর্কে আমি জানি ... তবে সেই পদ্ধতিটি নির্বাচিত ফাইলের পথটি মুছবে না।

বিঃদ্রঃ : আমি পৃষ্ঠাটি পুনরায় লোড করা, ফর্মটি পুনরায় সেট করতে বা একটি এজেএক্স কল করা থেকে বিরত থাকতে চাই।

এটা কি সম্ভব?

উত্তর:


-10

কীভাবে সেই নোডটি সরিয়ে, একই নামে একটি নতুন তৈরি করা যায়?


46
আপনি কী বলতে চাচ্ছেন, দয়া করে আমাকে একটি উদাহরণ দিন।

1
আপনি আপনার হ্যান্ডলারগুলি হারিয়ে ফেলবেন, এটির মতো: var ইনপুটফো = ডকুমেন্ট.জেট এলিমেন্টবাইআইডি ('ফটোআইপুট'); ইনপুটফোটো.এডডিএভেন্টলিস্টনার ('পরিবর্তন', হ্যান্ডলার_ ফাইল, মিথ্যা)
রুই মার্টিনস

নিখোঁজ ব্যাখ্যার জন্য ভোট দিয়েছেন!
জেসন

211

জাভাস্ক্রিপ্ট সহ ফাইল ইনপুট সাফ করার 3 টি উপায় রয়েছে:

  1. মান সম্পত্তি খালি বা নালিতে সেট করুন।

    আইই 11 + এবং অন্যান্য আধুনিক ব্রাউজারগুলির জন্য কাজ করে।

  2. একটি নতুন ফাইল ইনপুট উপাদান তৈরি করুন এবং পুরানোটি প্রতিস্থাপন করুন।

    অসুবিধাটি হ'ল আপনি ইভেন্ট শ্রোতাদের এবং প্রসারিত বৈশিষ্ট্যগুলি হারাবেন।

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

1
আমরা কি পরে তৈরি ফর্ম অপসারণ করা উচিত নয়?
আন্দ্রে

1
না, আপনার দরকার নেই। ফর্ম উপাদানটি পৃষ্ঠা নথির গাছে যুক্ত করা হয়নি।
cuixiping

5
২ বা ৩ পদক্ষেপ ব্যবহার করে কেবলমাত্র একটি সতর্কতার শব্দ, আপনি যদি প্রোগ্রামে কোনও উপাদানতে যুক্ত হওয়া ইভেন্ট এবং অন্যান্য বৈশিষ্ট্যগুলি সংরক্ষণ করতে চান তবে আপনার জন্য তাৎপর্য থাকতে পারে। আমার ক্ষেত্রে, আমি একটি ফর্ম উপাদানটিতে একটি অন্লিক ইভেন্ট যুক্ত করেছি যা ফর্ম পুনরায় সেট করার পরে অদৃশ্য হয়ে গেছে। যেমন একটি ক্ষেত্রে, পদ্ধতির 1 ভাল হয়। (এটি ২ এর জন্য চিহ্নিত ছিল, তবে এটি 3 এর জন্যও ঘটতে পারে)
ওল্ফি ইনু

85

tl; dr : আধুনিক ব্রাউজারগুলির জন্য, কেবল ব্যবহার করুন

input.value = '';

পুরানো উত্তর:

কেমন:

input.type = "text";
input.type = "file";

আমাকে এখনও বুঝতে হবে কেন এটি ওয়েবকিটের সাথে কাজ করে না

যাইহোক, এটি আই 9>, ফায়ারফক্স এবং অপেরা দিয়ে কাজ করে।
ওয়েবকিটের পরিস্থিতি হ'ল আমি মনে করি এটি ফাইলে ফিরতে অক্ষম।
আইই 8 এর সাথে পরিস্থিতিটি এটি একটি সুরক্ষা ব্যতিক্রম ছুঁড়ে দেয়।

সম্পাদনা: ওয়েবকিট, অপেরা এবং ফায়ারফক্সের জন্য এটি কাজ করে, যদিও:

input.value = '';

(এই প্রস্তাব দিয়ে উপরের উত্তরটি পরীক্ষা করুন)

আমি জিসির প্রয়োজন ছাড়াই এই ক্রস ব্রাউজারটি করার একটি দুর্দান্ত ক্লিনার উপায় খুঁজে পেতে পারি কিনা তা আমি দেখতে পাব।

Edit2:

try{
    inputs[i].value = '';
    if(inputs[i].value){
        inputs[i].type = "text";
        inputs[i].type = "file";
    }
}catch(e){}

বেশিরভাগ ব্রাউজারের সাথে কাজ করে। আইই <9 এর সাথে কাজ করে না, এটাই সব।
ফায়ারফক্স 20, ক্রোম 24, অপেরা 12, আই 7, আই 8, আই 9 এবং আই 10 তে পরীক্ষা করা হয়েছে।


35

মান নির্ধারণ করা হচ্ছে '' সমস্ত ব্রাউজারে কাজ করে না।

পরিবর্তে মানটি nullপছন্দ করার জন্য সেট করার চেষ্টা করুন :

document.getElementById('your_input_id').value= null;

সম্পাদনা: জেএসকে ফাইল ইনপুট সেট না করার জন্য আমি খুব বৈধ সুরক্ষার কারণ পেয়েছি, তবে ইতিমধ্যে আউটপুট নির্বাচন করে সাফ করার জন্য একটি সহজ পদ্ধতি সরবরাহ করা যুক্তিসঙ্গত বলে মনে হয় না । আমি একটি খালি স্ট্রিং ব্যবহার করার চেষ্টা করেছি তবে এটি সমস্ত ব্রাউজারগুলিতে NULLকাজ করে না , আমার চেষ্টা করা সমস্ত ব্রাউজারে কাজ করে (অপেরা, ক্রোম, এফএফ, আই 1111 এবং সাফারি)।

সম্পাদনা: দয়া করে নোট করুন যে NULLখালি স্ট্রিংয়ে সেটিং করার সময় সমস্ত ব্রাউজারে কাজ করার সেটিংস দেয় না।


6
দুর্ভাগ্যক্রমে আমি all browsersএটিকে দেখছি না ... এটি আইই 8, আইই 9 বা আই 10 তে কাজ করে না (তবে আইই 11 এ কাজ করে)।
ফ্রিফেলার 12

ভাল ডাং। আমি IE ব্রাউজারের পুরানো সংস্করণ পরীক্ষা করিনি। দুঃখিত।
বিগম্যাক66

31

দুর্ভাগ্যক্রমে উপরের উত্তরগুলির মধ্যে কোনওটিই সমস্ত ঘাঁটিটি কভার করে না - কমপক্ষে ভ্যানিলা জাভাস্ক্রিপ্টের সাথে আমার পরীক্ষার সাথে নয়।

  • .value = nullফায়ারফক্স, কোম, অপেরা এবং আইই ১১ (তবে আইই 8/9/10 নয় ) তে কাজ করছে বলে মনে হচ্ছে

  • .cloneNode(এবং .clone()jQuery এ) ফায়ারফক্সে .valueওভারটি অনুলিপি করতে উপস্থিত হয় , সুতরাং ক্লোনটি অর্থহীন করে তোলে।

সুতরাং এখানে ভ্যানিলা জাভাস্ক্রিপ্ট ফাংশনটি আমি লিখেছি যা ফায়ারফক্স (27 এবং 28), ক্রোম (33), আইই (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"));

1
এই উত্তর। এই প্রশ্নের এতগুলি উত্তর নিয়ে একটি সমস্যা - কেবলমাত্র এই পৃষ্ঠায় নয়, অন্যান্য ফোরামগুলি অনুসন্ধান করা, এটি হ'ল আপনি "3 টি ফাইল নির্বাচিত" পাঠ্য সাফ করতে পারেন, তবে এটি আসলে HTTP ফাইলগুলি সাফ করে না কিউ. তারপরে যা ঘটে তা হ'ল পরের বার আপনি আপলোড করার চেষ্টা করার পরে আপনি কেবল একটি ফাইল নির্বাচন করতে পারেন এবং আরও খারাপ এটি পূর্ববর্তী ফাইল ফোল্ডারে সংরক্ষিত হয়ে যায়। এই উত্তরটি উভয়ই সাফ করবে এবং আপনি প্রথম সেট আপলোড করার সাথে সাথে ফাইলগুলির পরবর্তী সেটটি আপলোড করা পুনরায় শুরু করতে পারবেন।
তারকাস

ifস্টেটমেন্টটি catchব্লকের ভিতরে রাখা উচিত নয় ?
ফাহমি

@Fahmi - না, এটা উচিত না
freefaller

ওহ আমি ভেবেছিলাম যে IE8 / 9/10 এ মান সেট করার চেষ্টা করার সময় একটি ব্যতিক্রম ছুঁড়ে ফেলবে nullctrl.value = null;কোন try...catchব্লকের ভিতরে a োকানোর অর্থ কী তা বোঝার মন ? নতুন প্রশ্নের জন্য দুঃখিত।
ফাহমি

1
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);- কোন মুহূর্তে আমরা মানটি সাফ করি, যেহেতু cloneNodeএটিও অনুলিপি করে?
ফাহমি

12

সমাধান

নিম্নলিখিত কোডটি jQuery নিয়ে আমার জন্য কাজ করেছিল। এটি প্রতিটি ব্রাউজারে কাজ করে এবং ইভেন্ট এবং কাস্টম বৈশিষ্ট্যগুলি সংরক্ষণ করার অনুমতি দেয়।

var $el = $('#your-input-id');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();

ডেমো

দেখা এই jsFizzকোড এবং প্রদর্শনের জন্য ।

লিংক


11

আপনাকে নতুন ফাইল ইনপুট দিয়ে এটি প্রতিস্থাপন করতে হবে। এটি এখানে jQuery দিয়ে কীভাবে করা যায় তা এখানে:

var inputFile = $('input[type=field]');
inputFile.wrap('<div />');

এবং যখন আপনাকে ইনপুট ক্ষেত্রটি পরিষ্কার করতে হবে তখন এই লাইনটি ব্যবহার করুন (উদাহরণস্বরূপ কোনও ইভেন্টে):

inputFile.parent().html( inputFile.parent().html() );

: জন্য মূল উপাদান, ভাল এই সৌন্দর্য প্রতিস্থাপন stackoverflow.com/questions/1043957/...
Mengdi গাও

9
document.getElementById('your_input_id').value=''

সম্পাদনা করুন:
এটি আই ও এবং অপেরাতে কাজ করে না তবে এটি ফায়ারফক্স, সাফারি এবং ক্রোমের জন্য কাজ করে বলে মনে হচ্ছে।


7
এটি আমার পক্ষে কাজ করে, যদিও আমি সর্বদা নিজেকে জিজ্ঞাসা করি কত দিন।
পেক্কা

এই অযথা কাজ করবে না, কেবল কিছু ব্রাউজারে এবং কোনও ফাইলের ইনপুটটির মান নির্ধারণ করা একটি সুরক্ষা লঙ্ঘন ... ভাল পছন্দ নয়।

5

আমার একই সমস্যা ছিল এবং আমি এটি নিয়ে এসেছি।

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>



3

আমি এইচটিএমএল ফাইল ইনপুট সাফ করার সহজ এবং পরিষ্কার উপায়ের সন্ধান করছিলাম, উপরের উত্তরগুলি দুর্দান্ত, তবে আমি যেটা সন্ধান করছি তার কোনও উত্তর সত্যই নেই, যতক্ষণ না ওয়েবে আমি সহজ করার জন্য একটি সুন্দর উপায় নিয়ে এসেছি:

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>


.. এবং আপনার কাছে বন্ধু, সম্ভাব্য ফাইল আপলোডে ত্রুটিগুলি পরীক্ষা করা এবং প্রদর্শন করার সময় এটি আমাকে সহায়তা করেছিল। এটি ত্রুটিতে পুনরায় সেট করা হয় এবং যে কেউ যদি এর মতো কিছু খুঁজছেন তবে ব্যবহারকারীকে একই ফাইলটিকে পুনরায় আপলোড করতে দেয়।
ক্লিনটন ডবস

1

উপরোক্ত উত্তরগুলি নিম্নলিখিত কারণে কিছুটা বিশৃঙ্খল সমাধান সরবরাহ করে:

  1. আমি থাকার মত না প্রথম এবং তারপর HTML পেয়ে, এটা খুবই জড়িত এবং নোংরা।wrapinput

  2. ক্রস ব্রাউজার জেএস কার্যকর হয় এবং মনে হয় যে এক্ষেত্রে নির্ভরযোগ্যভাবে typeস্যুইচিং (যা আবার কিছুটা নোংরামি) ব্যবহার করে সেট valueকরার জন্য অনেক অজানা রয়েছে are''

সুতরাং আমি আপনাকে আমার jQuery ভিত্তিক সমাধান প্রস্তাব:

$('#myinput').replaceWith($('#myinput').clone())

এটি যা বলে তা করে, এটি নিজের ক্লোন দিয়ে ইনপুটটি প্রতিস্থাপন করে। ক্লোনটিতে ফাইলটি নির্বাচিত হবে না।

সুবিধাদি:

  1. সহজ এবং বোধগম্য কোড
  2. কোন আনাড়ি মোড়ানো বা টাইপ স্যুইচিং
  3. ব্রাউজারের সামঞ্জস্যতা (আমি এখানে ভুল হলে আমাকে সংশোধন করুন)

ফলাফল: শুভ প্রোগ্রামার


3
Cross browser compatibility... আমার পরীক্ষায় দেখা যায় যে ফায়ারফক্স .valueঅংশ হিসাবে অনুলিপি করে .clone(), অতএব এটি অকেজো করে
ফ্রিফালার

@ ফ্রিফালার কেন ফোন করার আগে মান পরিবর্তন করবেন না replaceWith? আমি clone()নিজেকে ব্যবহার করছি এবং এটি ফায়ারফক্সে ভাল কাজ করছে (আমি জানি না এটি এখনও আপনার জন্য এক বছর পরে আছে কিনা =))
আবদো

@ আবদো - আপনি আমার উত্তরটি দেখুন যদি আপনি দেখতে পাবেন যে আমি করছি
ফ্রিফালার

প্রশ্নটি jQuery সম্পর্কে জিজ্ঞাসা করছে না; এটি জাভাস্ক্রিপ্ট সম্পর্কে জিজ্ঞাসা করছে।
আরেল

1

এখানে আমার দুটি সেন্ট, ইনপুট ফাইলগুলি অ্যারের হিসাবে সংরক্ষণ করা হয় তাই এখানে এটি কীভাবে বাতিল করা যায়

document.getElementById('selector').value = []

এটি একটি খালি অ্যারে ফেরত দেয় এবং সমস্ত ব্রাউজারে কাজ করে


0

আমাকে যেটা সাহায্য করেছিল তা হ'ল, আমি সারিটি সাফ করার পরিবর্তে লুপ ব্যবহার করে শেষ নির্বাচিত ফাইলটি আনতে এবং আপলোড করার চেষ্টা করেছি এবং এটি কার্যকর হয়েছে। কোডটি এখানে।

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

আশা করি এটি কিছু সাহায্য করবে।


0

আমি বেশিরভাগ সমাধানের চেষ্টা করেছি তবে মনে হয় কেউ কাজ করেনি। তবে আমি নীচে এটির জন্য প্রায় হেঁটেছি।

ফর্মের গঠন: form=> label, inputএবং submit button। আমরা কোনও ফাইল চয়ন করার পরে, ফাইলের নামটি জাভাস্ক্রিপ্টে ম্যানুয়ালি করে লেবেল দ্বারা প্রদর্শিত হবে।

সুতরাং আমার কৌশলটি হ'ল: প্রাথমিকভাবে জমাটি buttonঅক্ষম করা হয়, কোনও ফাইল চয়ন করার পরে, জমা বোতামের disabledবৈশিষ্ট্যটি মুছে ফেলা হবে যাতে আমি ফাইল জমা দিতে পারি। আমি জমা দেওয়ার পরে, আমি labelফাইলটি সাফ করার মতো দেখতে এটি পরিষ্কার করে ফেললামinput তবে বাস্তবে নয়। তারপরে ফর্মটি জমা দেওয়া থেকে বিরত রাখতে আমি আবার জমা দেওয়ার বোতামটি অক্ষম করব।

জমা দিন button disableবা না সেট করে , আমি অন্য ফাইলটি না বাছাই করে আমি ফাইলটি অনেকবার জমা দেওয়া থেকে থামিয়ে দিই।


0

আমি টেক্সট টাইপ করতে পরিবর্তন করেছি এবং 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");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.