প্রোগ্রামগতভাবে "ফাইল নির্বাচন করুন" ডায়ালগ বাক্স ট্রিগার করুন


101

আমার কাছে একটি লুকানো ফাইল ইনপুট উপাদান রয়েছে। কোনও বাটনের ক্লিক ইভেন্ট থেকে এর নির্বাচন করা ফাইল ডায়লগ বক্সটি ট্রিগার করা সম্ভব ?

উত্তর:


148

যদি আপনি নিজের ফাইলটি ব্যবহারের পরিবর্তে আপলোড <input type="file" />করতে চান তবে আপনি এর মতো কিছু করতে পারেন:

<input id="myInput" type="file" style="visibility:hidden" />
<input type="button" value="Show Dialog" onclick="$('#myInput').click();" />

নোট করুন যে আমি visibility: hiddenপরিবর্তে ব্যবহার করেছি display: none। আপনি ক্লিক ইভেন্টটিকে একটি অ-প্রদর্শিত ফাইল ইনপুটটিতে কল করতে পারবেন না।


বেসিক কেসগুলির জন্য সোজা, তবে অনেক ব্রাউজারের সাথে সামঞ্জস্য নয়। দয়া করে মনে রাখবেন যে এই সমাধানটি অপসারণের ক্ষেত্রে একটি বোতামের উপর ফাইল ইনপুট উপাদানটি ওভারলেটিংয়ের সাথে একত্রিত করার জন্য আরও ভাল ধারণা: 0, কারণ এটি Xeon06 এর উত্তরে উল্লিখিত হয়েছে।
স্কয়ারকিট

11
আপডেট: আধুনিক ব্রাউজারগুলিতে আপনি এমন একটি ইনপুট ক্লিক করতে পারেন যা ডিওমেও নেই। অসাধারণ!
অ্যাডরিয়া

7
আমি কেবল click()একটি display:noneইনপুট চেষ্টা করেছি এবং এটি কাজ করেছে
ড্যানিয়েল চেং

16
হ্যাঁ, এখানে ২০১৫ সালে কাজ click()করে একটি উপাদান জুড়ে display: none! ;) গত চার বছরে জিনিসগুলি কীভাবে পরিবর্তিত হয়েছে।
ffxsam

4
hiddenপরিবর্তে আপনি বৈশিষ্ট্যটি ব্যবহার করতে পারেন style="visibility:hidden": <input id="myInput" type="file" hidden>( w3schools.com/tags/att_global_hided.asp )
cespon

117

এখানে বেশিরভাগ উত্তরের একটি দরকারী তথ্যের অভাব রয়েছে:

হ্যাঁ, আপনি jQuery / জাভাস্ক্রিপ্ট ব্যবহার করে প্রোগ্রামগতভাবে ইনপুট উপাদানটি ক্লিক করতে পারেন, তবে কেবলমাত্র আপনি যদি এটি ব্যবহারকারীর দ্বারা শুরু করা হয়েছিল এমন কোনও ইভেন্টের অন্তর্গত ইভেন্ট হ্যান্ডেলারটিতে করেন!

সুতরাং, উদাহরণস্বরূপ, যদি আপনি, স্ক্রিপ্টটি প্রোগ্রামালিভাবে একটি অজ্যাক্স কলব্যাকের বোতামটি ক্লিক করেন তবে কিছুই ঘটবে না, তবে আপনি যদি কোনও ইভেন্ট হ্যান্ডলারটিতে একই কোডের লাইনটি ব্যবহারকারী দ্বারা উত্থাপিত করেন তবে এটি কার্যকর হবে।

পিএস debugger;কীওয়ার্ডটি ব্রাউজ উইন্ডোটিকে যদি প্রোগ্রামমেটিকাল ক্লিকের আগে হয় বাধা দেয় ... কমপক্ষে ক্রোম 33 এ ...


যেমন @ লুইসবাটেল্লার্ড যথাযথভাবে উল্লেখ করেছেন: কেবলমাত্র আসল ইভেন্ট হ্যান্ডলারটিই ব্যবহারকারী দ্বারা শুরু করা প্রয়োজন নয়; এটি অবশ্যই একটি ক্লিক ইভেন্ট হতে হবে। এখানে তিনি একটি
ফিজল

4
আপনি গতিশীলভাবে উত্পন্ন কিছুতে ক্লিক করতে পারেন। জ্যাকুইরিতে, এটি$(staticElementParent).on("click", "dynamicChild", function(){})
ড্যানিয়েল চেং

4
ধন্যবাদ!!!! আমি জাভাস্ক্রিপ্ট কনসোল এই সমস্ত উত্তর পরীক্ষা করা হয়েছে এবং আমি বাদাম যাচ্ছে!
jdkealy

8
আমি প্রোগ্রামের সাথে একটি ফাইল ইনপুট উইন্ডো প্রম্পট দিয়ে আধা ঘন্টা ধরে লড়াই করে যাচ্ছি। কোনও ইডিএসই বলেছে যে ইভেন্টটি যদি ব্যবহারকারী দ্বারা শুরু না করা হয় তবে এটি অসম্ভব ... আপনি প্রচুর +1 প্রাপ্য।
উমাগন

4
ক্রোম 62 হিসাবে debugger;কীওয়ার্ডটি আর প্রোগ্রামিমেট ক্লিককে বাধা দেয় না
ক্রিস ডব্লিউ

64

কেবল রেকর্ডের জন্য, একটি বিকল্প সমাধান রয়েছে যার জন্য জাভাস্ক্রিপ্টের প্রয়োজন নেই। এটি একটি হ্যাকের সামান্য বিষয়, কোনও লেবেলে ক্লিক করা সম্পর্কিত ইনপুটটিতে ফোকাস সেট করে এই সত্যটি কাজে লাগিয়ে।

আপনার <label>একটি যথাযথ forবৈশিষ্ট্যযুক্ত (ইনপুটটির দিকে নির্দেশ করা), বাটনের মতো বিকল্পশালী স্টাইলযুক্ত (বুটস্ট্র্যাপ সহ, ব্যবহার btn btn-default) দরকার। যখন ব্যবহারকারী লেবেলে ক্লিক করেন, ডায়ালগটি খোলে, উদাহরণস্বরূপ:

<!-- optionnal, to add a bit of style -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>

<!-- minimal setup -->
<label for="exampleInput" class="btn btn-default">
  Click me
</label>
<input type="file" id="exampleInput" style="display: none" />


4
আমি এটি পছন্দ করি, আমার কৌণিক প্রকল্পে পুরো jQuery অন্তর্ভুক্ত করতে চাই না, দুর্দান্ত কাজ করে :)
স্টারসক্রিম 1984

4
এই আচরণটি কি সমস্ত আধুনিক ব্রাউজারগুলিতে নির্ভরযোগ্য?
জোশুয়া ডেভিড

নেটিভ ব্রাউজার আচরণ ব্যবহার করে এটি কোনও জেএস ছাড়াই কাজ করে। অনড্রপ ইভেন্টগুলির সাথে যুক্ত, একটি বৈশিষ্ট্যযুক্ত সমৃদ্ধ ফাইল আপলোড কার্যকর করে!
ইয়ানিক রোচন

আমাকে সিএসএসের সাথে ঝাঁকুনি দিতে হয়েছিল তবে এটি কাজ করেছিল - অর্থাত্ "ব্রাউজারে" প্রদর্শন: কিছুই নয় "ফাইল ইনপুট দৃশ্যমানতা ঠিক নেই। (তবে 0 এর অস্বচ্ছতা ইত্যাদি ব্যবহার করা যেতে পারে)
ড্রিফ্যাচ্যাচার

14

আমি নিশ্চিত নই যে ব্রাউজারগুলি কীভাবে type="file"উপাদানগুলিতে ক্লিক করে (সুরক্ষা উদ্বেগ এবং সমস্ত), কিন্তু এটিতে কাজ করা উচিত:

$('input[type="file"]').click();

আমি এই জেএসফিডালটি ক্রোম, ফায়ারফক্স এবং অপেরাতে পরীক্ষা করেছি এবং তারা সকলেই ফাইল ব্রাউজ ডায়ালগটি দেখায়।


5
এটি কেবল তখনই কাজ করবে বলে মনে হয় যখন "কলিং" ইভেন্টটি নিজেই একটি ক্লিক ইভেন্ট। উদাহরণস্বরূপ, কোনও hoverইভেন্টের ভিত্তিতে ফাইল ডায়লগটি খোলানো
লুই বি।

আপনি কী জানেন কী ইনপুটটি ডিওমে না থাকলে সেলেনিয়াম দিয়ে এটি কীভাবে পরীক্ষা করা যায়?
সেবাস্তিয়ান লরবার

4

আমি input[type=file]লেবেল ট্যাগগুলিতে মোড়কে রাখি , তারপরে labelআপনার পছন্দ অনুসারে স্টাইল করুন এবং লক করুন input

<label class="btn btn-default fileLabel" data-toggle="tooltip" data-placement="top" title="Upload">
    <input type="file">
    <span><i class="fa fa-upload"></i></span>
</label>

<style>
    .fileLabel input[type="file"] {
        position: fixed;
        top: -1000px;
    }
</style>

খাঁটি সিএসএস সলিউশন।


<input type="file" hidden>একটি সিএসএস শৈলী প্রয়োগ করার প্রয়োজন সবেমাত্র সেট করে set
সিলভেন লেজেজ

3

স্থানীয়ভাবে একমাত্র উপায় হ'ল একটি <input type="file">উপাদান তৈরি করা এবং তারপরে দুর্ভাগ্যক্রমে ক্লিক ক্লিক করে।

একটি ক্ষুদ্র প্লাগইন রয়েছে (নির্লজ্জ প্লাগ) যা ব্যথাটি সর্বদা এটি করার জন্য দূরে সরিয়ে ফেলবে: ফাইল-সংলাপ

fileDialog()
    .then(file => {
        const data = new FormData()
        data.append('file', file[0])
        data.append('imageName', 'flower')

        // Post to server
        fetch('/uploadImage', {
            method: 'POST',
            body: data
        })
    })

3

সর্বোত্তম সমাধান, সমস্ত ব্রাউজারে .. এমনকি মোবাইলেও কাজ করে।

<div class="btn" id="s_photo">Upload</div>

<input type="file" name="s_file" id="s_file" style="opacity: 0;">';

<!--jquery-->

<script>
    $("#s_photo").click(function() {
        $("#s_file").trigger("click");
    });
</script>

ইনপুট ফাইলের ধরণটি ব্রাউজারগুলিতে সমস্যা দেখা দেয়, অস্বচ্ছতা হ'ল সর্বোত্তম সমাধান কারণ এটি লুকিয়ে নেই, কেবল প্রদর্শিত হচ্ছে না। :)


4
আপনার উল্লেখ করা উচিত যে এর জন্য একটি jquery রেফারেন্স প্রয়োজন।
ব্রিনো

অস্বচ্ছতা একটি সম্পূর্ণ সম্পর্কহীন ধারণা জড়িত - আপনি যদি ভাগ্যবান হন তবে যদি এটি "ভিউ-থ্রো" উপাদানটির সাথে আপনার বিন্যাসকে প্রভাবিত করে না। উপাদানটি সেখানে থাকা উচিত, তবে দৃশ্যমান নয়, তাই visibility:hiddenআরও ভাল পছন্দ হওয়া উচিত।
সংযোগ

visibility: hiddenএখনও লেআউট প্রভাবিত করে। display: noneআপনি কি চান
stommestack

1

সুরক্ষার কারণে কোনও ক্রস ব্রাউজার করার উপায় নেই। লোকেরা সাধারণত যা করে তা হ'ল ইনপুট ফাইলটিকে অন্য কোনও কিছুর উপরে ওভারলে করে এবং এর দৃশ্যমানতাটি লুকানোতে সেট করে যাতে এটি নিজেরাই ট্রিগার হয়। আরও তথ্য এখানে।


4
ওপি কথা বলছে <input type="file">, না <select>
বোজাঙ্গলেস

কোন সমস্যা নেই. আমি নিজে আগেই করে ফেলেছি। আপনার সম্পাদনার জবাবে, সেখানে হয় এটা করতে একটি উপায়; jQuery দিয়ে উপাদানটির ক্লিক ইভেন্টটি ট্রিগার করে $.click()
বোজাঙ্গলেস

4
@ জ্যাম ওয়াফলস ঠিক আছে যে অদ্ভুত। আমার স্পষ্ট মনে আছে কয়েক সপ্তাহ আগে এই পুরো দিনটি ব্যয় করা। এটি ফায়ারফক্স এবং আইই তে কাজ করে নি। আমি ভাবলাম যে চুক্তিটি কী ছিল ...
অ্যালেক্স টারপিন

কৌতুহলী। আমার উত্তরে আমার একটি জেএসফিডাল রয়েছে যা এফএফের সাথে কাজ করে। আমি IE তে পরীক্ষা করতে পারি না (আমি লিনাক্সে আছি), তাই এখনও জানি না যে এটি এখনও ফেলে দেওয়া হবে।
বোজ্যাংলেস

4
ভাল গবেষণার চেষ্টা সেখানে! আমি যদি প্রতিটি বার ওয়েব বিকাশকারীদের কিছু অর্থের জন্য কিছু সাধারণ আচরণ হ্যাক করতে পেতাম তবে আমি নোংরা ধনী হব।
বোজ্যাঙ্গলেস

1

আপনি REACT তে উপাদান প্রপস পেতে বাঁধাই ব্যবহার করছেন তা নিশ্চিত করুন

class FileUploader extends Component {
  constructor (props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }
   onChange=(e,props)=>{
    const files = e.target.files;
    const selectedFile = files[0];
    ProcessFileUpload(selectedFile,props.ProgressCallBack,props.ErrorCallBack,props.CompleatedCallBack,props.BaseURL,props.Location,props.FilesAllowed);
  }
   handleClick = () => {
    this.refs.fileUploader.click();
  }
  render()
  {
  return(
      <div>
        <button type="button" onClick={this.handleClick}>Select File</button>  
        <input type='file' onChange={(e)=>this.onChange(e,this.props)} ref="fileUploader" style={{display:"none"}} />
      </div>)
  }
}

0

JQuery ব্যবহার করে আপনি click()ক্লিকের অনুকরণ করতে কল করতে পারেন ।



0

যারা একই চান তবে তাদের ব্যবহার করুন প্রতিক্রিয়া

openFileInput = () => {
    this.fileInput.click()
}

<a href="#" onClick={this.openFileInput}>
    <p>Carregue sua foto de perfil</p>
    <img src={img} />
</a>
<input style={{display:'none'}} ref={(input) => { this.fileInput = input; }} type="file"/>

0
<div id="uploadButton">UPLOAD</div>
<form action="[FILE_HANDLER_URL]" style="display:none">
     <input id="myInput" type="file" />
</form>
<script>
  const uploadButton = document.getElementById('uploadButton');
  const myInput = document.getElementById('myInput');

  uploadButton.addEventListener('click', () => {
    myInput.click();
  });
</script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.