ফাইল নির্বাচন কিভাবে ঘটনা আগুন


95

আমি হিসাবে একটি ফর্ম আছে

<form  onSubmit="return disableForm(this);" action="upload.php" method="post" name="f" id="wizecho" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button onClick="return disableForm(this),ajaxUpload(this.form,'wizecho_upload.php', '&lt;br&gt;Uploading image please wait.....&lt;br&gt;'); return false;">
        Upload Image
    </button>
</form>

এটি একটি চিত্র আপলোড করা হয়।

এখানে ছবিটি আপলোড করতে আমাকে বোতামে ক্লিক করতে হবে এবং আমার onClickইভেন্টটি ব্যবহার করতে হবে । আমি আপলোড বোতামটি সরাতে চাই এবং ইনপুটটিতে ফাইলটি নির্বাচন করা মাত্রই আমি ইভেন্টটি সরিয়ে দিতে চাই। আমি কেমন করে ঐটি করি??


আপনি একই ফাইল দুইবার নির্বাচন নিয়ে উদ্বিগ্ন হয়, @applecrusher নির্বাচিত উত্তর চেয়ে ভাল সমাধান আছে stackoverflow.com/a/40581284/1520304
উইল Farley আপনার

উত্তর:


130

ফাইল ইনপুটটিতে পরিবর্তন ইভেন্টটি ব্যবহার করুন।

$("#file").change(function(){
         //submit the form here
 });

32
এবং আপনি যখন অ্যাসিঙ্ক্রোনালি ফর্মটি জমা দিন, পৃষ্ঠাটি থেকে সরে যাবেন না, তখন আবার কী একই ফাইলটি আপলোড করার চেষ্টা করবেন? এই কোডটি কেবল একবার কার্যকর করা হবে, দ্বিতীয় বার, একই ফাইলটি নির্বাচন করা কোনও পরিবর্তন ইভেন্ট
ক্রিস্টোফার থমাস

6
@ChristopherThomas 'আপত্তি ঠিক আমি কেন এসেছি, এবং সৌভাগ্য যে সেখানে এটি সমাধান নীচে একটি অনেক-undervoted প্রতিক্রিয়া, বছর পরে: stackoverflow.com/a/40581284/4526479
কাইলি বেকার

4
আমি আবার একই ফাইলটি নির্বাচন করলে ইভেন্ট পরিবর্তনটি ট্রিগার হয় না। অন্য কোন উপায়ে যা প্রতিবার কাজ করতে পারে?
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

4
@ Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ আপনার ঠিক উপরে মন্তব্য দেখুন।
ডেভিড লোপেজ

4
উত্তরটি খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করে না
এমনটি

68

আপনি ইনপুট ফিল্ডে ওভিচ ইভেন্টের জন্য সদস্যতা নিতে পারেন:

<input type="file" id="file" name="file" />

এবং তারপর:

document.getElementById('file').onchange = function() {
    // fire the upload here
};

49

এটি একটি পুরানো প্রশ্ন যা এর জন্য একটি নতুন উত্তর দরকার যা উত্তরের উত্তর গ্রহণের মন্তব্যে @ ক্রিসটফার থমাসের উদ্বেগকে সম্বোধন করবে। আপনি যদি পৃষ্ঠাটি থেকে সরে না যান এবং তারপরে দ্বিতীয়বার ফাইলটি নির্বাচন করেন, আপনি ক্লিক করতে বা কোনও টাচ স্টার্ট (মোবাইলের জন্য) করার সময় আপনাকে মানটি সাফ করতে হবে। আপনি পৃষ্ঠাটি থেকে সরে গিয়ে jquery ব্যবহার করার পরেও নীচের অংশগুলি কাজ করবে:

//the HTML
<input type="file" id="file" name="file" />



//the JavaScript

/*resets the value to address navigating away from the page 
and choosing to upload the same file */ 

$('#file').on('click touchstart' , function(){
    $(this).val('');
});


//Trigger now when you have selected any file 
$("#file").change(function(e) {
    //do whatever you want here
});

এই ক্রস ব্রাউজারটি কি সামঞ্জস্যপূর্ণ? দেখে মনে হচ্ছে এটি ঠিক ব্যবহার করছে val('')যা বেশিরভাগ ব্রাউজারে কাজ করে না।
শান কেন্ডল

আপনি চেষ্টা করেছেন তাতে কোন ব্রাউজারটি কাজ করে না? যদি বিষয়টি এখনও আপনার কাছে সমস্যা থাকে তবে এটি নিজের সাথে ক্লোন করার চেষ্টা করুন।
অ্যাপ্লিক্রেশন

4
আমার ইস্যুটি ব্যবহার করছিল element.setAttribute("value", "")আপনি যদি jQuery ব্যবহার না করেন তবে আপনার element.value = ""ফাইলের উপাদানটি সঠিকভাবে পরিষ্কার করার জন্য আপনার প্রয়োজন ।
ফিল

1

সাফল্যের সাথে ফাইল লোড হওয়ার পরে আপনি যা কিছু করতে চান তা করুন your আপনার ফাইল প্রসেসিং শেষ হওয়ার পরে ফাইল কন্ট্রোলের মান ফাঁকা স্ট্রিংয়ে সেট করুন so উদাহরণস্বরূপ আপনি এই জিনিসটি করতে পারেন এবং কবিতার মতো আমার জন্য কাজ করেছেন

  $('#myFile').change(function () {
    LoadFile("myFile");//function to do processing of file.
    $('#myFile').val('');// set the value to empty of myfile control.
    });

1

আপনি যখন একই ফাইলটি একাধিকবার আপলোড করেন এবং @ পরিবর্তন ইভেন্টটি ট্রিগার করে না তখন সমস্যা ব্যবহারকারীদের জন্য সমাধান, সমাধান করা:

 <input
      ref="fileInput"
      type="file"
      @click="onClick"
    />
  methods: {
    onClick() {
       this.$refs.fileInput.value = ''
       // further logic for file...
    }
  }

<ইনপুট টাইপ = @ পরিবর্তন "ফাইল" = "onFileChange" শ্রেনী = "ইনপুট আপলোড-ইনপুট" সুত্র = "inputFile" /> স্ব $ refs.inputFile.value = ''।
প্রগতি Dugar

0

<ইনপুট টাইপ = "ফাইল" @ চেঞ্জ = "অনফাই চ্যাঞ্জ" ক্লাস = "ইনপুট আপলোড-ইনপুট" রেফ = "ইনপুট ফাইল" />

onFileChange(e) {
//upload file and then delete it from input 
 self.$refs.inputFile.value = ''
}

0

এস 6 ব্যবহার করে ভ্যানিলা জেএস

document.querySelector('input[name="file"]').addEventListener('change', (e) => {
 const file = e.target.files[0];
  // todo: use file pointer
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.