টুইটার বুটস্ট্র্যাপ ফর্ম ফাইল এলিমেন্ট আপলোড বোতাম


573

টুইটার বুটস্ট্র্যাপের জন্য কেন কোনও অভিনব ফাইল উপাদান আপলোড বোতাম নেই? আপলোড বোতামটির জন্য যদি নীল প্রাথমিক বোতামটি প্রয়োগ করা হয় তবে এটি মিষ্টি হবে। সিএসএস ব্যবহার করে আপলোড বোতামটি জরিমানা করা কি সম্ভব? (এমন কোনও নেটিভ ব্রাউজার উপাদানটির মতো মনে হয় যা ম্যানিপুলেট করা যায় না)


13
আপনি এখানে পেতে পারেন। চিহ্নস্লিমা.github.io/bootstrap-filestyle
rh0dium

উত্তর:


972

বুটস্ট্র্যাপ 3 এবং 4 এর জন্য এখানে একটি সমাধান।

একটি বোতামের মতো দেখতে একটি কার্যকরী ফাইল ইনপুট নিয়ন্ত্রণ করতে আপনার কেবলমাত্র এইচটিএমএল প্রয়োজন:

এইচটিএমএল

<label class="btn btn-default">
    Browse <input type="file" hidden>
</label>

এটি IE9 + সহ সমস্ত আধুনিক ব্রাউজারে কাজ করে। আপনার যদি পুরানো IE এর জন্য সমর্থনও প্রয়োজন হয় তবে দয়া করে নীচে দেখানো উত্তরাধিকার পদ্ধতির ব্যবহার করুন।

এই কৌশলগুলি HTML5 hiddenবৈশিষ্ট্যের উপর নির্ভর করে । অসফল সমর্থনকারী ব্রাউজারগুলিতে এই বৈশিষ্ট্যটি ছাঁটাই করতে বুটস্ট্র্যাপ 4 নিম্নলিখিত সিএসএস ব্যবহার করে। আপনি বুটস্ট্র্যাপ 3 ব্যবহার করছেন তবে আপনাকে যুক্ত করতে হতে পারে।

[hidden] {
  display: none !important;
}

পুরানো IE জন্য উত্তরাধিকার পদ্ধতির

আইই 8 এবং এর জন্য আপনার যদি প্রয়োজন হয় তবে নিম্নলিখিত এইচটিএমএল / সিএসএস ব্যবহার করুন:

এইচটিএমএল

<span class="btn btn-default btn-file">
    Browse <input type="file">
</span>

সিএসএস

.btn-file {
    position: relative;
    overflow: hidden;
}
.btn-file input[type=file] {
    position: absolute;
    top: 0;
    right: 0;
    min-width: 100%;
    min-height: 100%;
    font-size: 100px;
    text-align: right;
    filter: alpha(opacity=0);
    opacity: 0;
    outline: none;
    background: white;
    cursor: inherit;
    display: block;
}

মনে রাখবেন যে আপনি যখন ক্লিক করেন তখন পুরানো IE ফাইল ইনপুট ট্রিগার করে না <label>, তাই CSS "ব্লোট" এর চারপাশে কাজ করার জন্য কয়েকটি কাজ করে:

  • ফাইলের ইনপুটটিকে আশেপাশের পুরো প্রস্থ / উচ্চতা স্প্যান করে <span>
  • ফাইল ইনপুট অদৃশ্য করে তোলে

প্রতিক্রিয়া এবং অতিরিক্ত পঠন

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

http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/


52
+ 1 আমার জন্য এটি এখন পর্যন্ত সেরা উত্তর। বুটস্ট্র্যাপের সর্বশেষতম সংস্করণটি ব্যবহার করে খুব সংক্ষিপ্ত সমাধান।
উদাইস

6
@ ইউলিজ @ জারেডআইটনিয়ার @ ইভানওয়্যাং আমি শ্রদ্ধার সাথে একমত নই। এবং আমার উত্তরে একটি নির্লজ্জ প্লাগ অফার করুন যা কেবল <label>উপাদানটি ব্যবহার করে । সর্বোত্তম সমাধান হিসাবে :)
কিরিল ফুকস

9
আমাকে @ কিরিলফুচসের সাথে একমত হতে হবে; লেবেল আরও ভাল হবে। এছাড়াও - ব্যবহারকারীরা সঠিক ফাইলটি নির্বাচন করেছেন কিনা তা দেখতে পাবে না কারণ বাটনটি নির্বাচিত ফাইলটির নামটি দেখায় না: jsfiddle.net/36o9pdf9/1
22-28 এ 22-28

1
লেবেল শব্দার্থগতভাবে আরও ভাল হবে। কোন ফাইল নির্বাচন করা হয়েছে তা দেখানোর পদ্ধতিটির জন্য নিবন্ধটি দেখুন। (কিছু ফাইল অ্যাপলিকেশন স্বয়ংক্রিয়ভাবে আপলোড হয় যখন কোনও ফাইল নির্বাচন করা হয়, সুতরাং সেই ক্ষেত্রে ফাইলের নাম প্রতিক্রিয়া সমালোচনা নয় isn't)
ক্লাভিস্কা

1
আমি ফর্মডাটা অবজেক্টের সাথে আইই 11 এ কাজ করতে পারি না। কোনও লেবেল উপাদানের ভিতরে থাকা অবস্থায় ইনপুট ক্ষেত্রটি কোনওরকম IE উপেক্ষা করছে এবং ফলস্বরূপ ফর্মডাটা অবজেক্ট থেকে ফাইল ডেটা উপলব্ধ নেই।
রেনে

384

আমি অবাক হয়েছি যে <label>উপাদানটির কোনও উল্লেখ নেই ।

সমাধান:

<label class="btn btn-primary" for="my-file-selector">
    <input id="my-file-selector" type="file" class="d-none">
    Button Text Here
</label>

কোনও জেএস, বা ফানকি সিএসএসের দরকার নেই ...

ফাইলের নাম অন্তর্ভুক্ত করার জন্য সমাধান:

<label class="btn btn-primary" for="my-file-selector">
    <input id="my-file-selector" type="file" style="display:none" 
    onchange="$('#upload-file-info').html(this.files[0].name)">
    Button Text Here
</label>
<span class='label label-info' id="upload-file-info"></span>

উপরের সমাধানটির জন্য jQuery প্রয়োজন।


38
এই উত্তরটি গ্রহণযোগ্য হওয়া উচিত। এটি @ ক্লাভিস্কার উত্তরের চেয়ে আরও ভাল
ফার্নান্দো কারভালহোসা

4
কেন এটি গৃহীত উত্তর নয় তা বেশ বুঝতে পারি না। পরিষ্কার, সহজ এবং স্থিতিশীল (যদি না আপনি <আই 9 টার্গেট করছেন, তবে ...)
জ্যাক ফস্টার

3
আমি ফর্মডাটা অবজেক্টের সাথে আইই 11 এ কাজ করতে পারি না। কোনও লেবেল উপাদানের ভিতরে থাকা অবস্থায় ইনপুট ক্ষেত্রটি কোনওরকম IE উপেক্ষা করছে এবং ফলস্বরূপ ফর্মডাটা অবজেক্ট থেকে ফাইল ডেটা উপলব্ধ নেই।
রেনে

25
ভাল, এটি কোন ফাইলটি চয়ন করা তা প্রদর্শন করে না (
Godblessstrawberry

3
আপনি forযদি লেবেল সহ লক্ষ্য উপাদানটি মোড়ানো করেন তবে আপনাকে ব্যবহার করার দরকার নেই ।
0xcaff

132

অতিরিক্ত কোনও প্লাগইন প্রয়োজন না হওয়ায় এই বুটস্ট্র্যাপ সমাধানটি আমার পক্ষে দুর্দান্ত কাজ করে:

<div style="position:relative;">
        <a class='btn btn-primary' href='javascript:;'>
            Choose File...
            <input type="file" style='position:absolute;z-index:2;top:0;left:0;filter: alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;background-color:transparent;color:transparent;' name="file_source" size="40"  onchange='$("#upload-file-info").html($(this).val());'>
        </a>
        &nbsp;
        <span class='label label-info' id="upload-file-info"></span>
</div>

ডেমো:

http://jsfiddle.net/haisumbhatti/cAXFA/1/ (বুটস্ট্র্যাপ 2)

এখানে চিত্র বর্ণনা লিখুন

http://jsfiddle.net/haisumbhatti/y3xyU/ (বুটস্ট্র্যাপ 3)

এখানে চিত্র বর্ণনা লিখুন


6
বোতামটি ক্লিকযোগ্য নয় এমন নীচের অঞ্চল নিয়ে আমার কিছু সমস্যা ছিল। এই উত্তরটি আমাকে বুটস্ট্র্যাপ 3 এ সহায়তা করেছে: stackoverflow.com/a/18164555/44336
পল লেমকে

3
এটি সংযুক্ত ফাইলের ফাইলের নাম দেখায় এটি একটি দুর্দান্ত সমাধান!
সিবি 88

2
কেউ দয়া করে href = 'জাভাস্ক্রিপ্ট:;' এর প্রয়োজনীয়তা ব্যাখ্যা করতে পারেন ? আমার অন্বেষণের দরকার নেই = '"(" # আপলোড-ফাইল-তথ্য ") h এইচটিএমএল ($ (এটি) .ভাল ());' আপলোড-ফাইল-তথ্য উপাদানটি আপডেট করতে, তবে ফাইল আপলোড ডায়ালগটি href ছাড়া ট্রিগার করবে না।
ব্যবহারকারী 12121234

2
'সি: \ নকলপথ' কোথা থেকে আসছে এবং আমি কীভাবে এ থেকে মুক্তি পাব?
ইয়া

1
@Ya। সি: \ ভুয়াপথটি এইচটিএমএল 5 সুরক্ষা বৈশিষ্ট্য এবং যদি আমরা জাভাস্ক্রিপ্টের সাহায্যে এটি পরিচালনা করি তবে পাথ ফাইলের উপসর্গযুক্ত। বিস্তারিত জানার জন্য এই ব্লগ পোস্টটি ডেভিডওয়াল.নাম / ফেকপথ দেখুন।
কোডফ্রেক

88

এটি জেসির বুটস্ট্র্যাপের কাঁটাচামচ অন্তর্ভুক্ত।

ব্যবহার করে একটি সাধারণ আপলোড বোতাম তৈরি করা যেতে পারে

<span class="btn btn-file">Upload<input type="file" /></span>

ফাইলআপলোড প্লাগইন দিয়ে আপনি আরও উন্নত উইজেট তৈরি করতে পারেন। Http://jasny.github.io/bootstrap/ javascript/#fileinput এ একবার দেখুন


আইই 9 তে এই কাজটি ঠিক আছে? আমি জিজ্ঞাসা করছি কারণ আমি ধরে নিচ্ছি যে সমাধানটি জাভাস্ক্রিপ্টের ব্যবহার করে এবং একই সাথে সুরক্ষা কারণে জাভাস্ক্রিপ্ট থেকে "আইই টাইপ =" ফাইল "ইনপুট উপাদানটির কারসাজির অনুমতি দেয় না।"
মারেক পাহোদা

হ্যাঁ এটি আই 9 তেও কাজ করে। এটি ইনপুট উপাদানটির অস্বচ্ছতা 0 তে সেট করে যা ভাগ্যক্রমে সমস্ত ব্রাউজারে কাজ করে :)। এটি কুইর্কসমোড নিবন্ধে ব্যাখ্যা করা হয়েছে।
আর্নল্ড ড্যানিয়েলস

1
এটি jQuery 1.9.0 এর সাথে কাজ করে না, কারণ তারা $ ব্রাউজার সমর্থনটি বাদ দিয়েছে
জিডরিয়াস

14
নিয়মিত বুটস্ট্র্যাপের সাথে দেখতে ভয়ঙ্কর দেখাচ্ছে - img688.imageshack.us/img688/948/pictureui.png
cwd

66

আপলোড বোতামগুলি শৈলীতে ব্যথা কারণ এটি ইনপুটটিকে স্টাইল করে না বোতামটি।

তবে আপনি এই কৌশলটি ব্যবহার করতে পারেন:

http://www.quirksmode.org/dom/inputfile.html

সারসংক্ষেপ:

  1. একটি সাধারণ নিন <input type="file">এবং এটি দিয়ে একটি উপাদান এ দিন position: relative

  2. এই একই অভিভাবক উপাদানটিতে, একটি সাধারণ <input>এবং একটি চিত্র যুক্ত করুন, যার সঠিক শৈলী রয়েছে। এই উপাদানগুলিকে একেবারে অবস্থান দিন, যাতে তারা একই স্থান দখল করে <input type="file">

  3. এর জেড-ইনডেক্স <input type="file">2 তে সেট করুন যাতে এটি স্টাইলযুক্ত ইনপুট / চিত্রের উপরে থাকে।

  4. পরিশেষে, অপসারণের <input type="file">জন্য 0 এ সেট করুন । <input type="file">এখন কার্যকরভাবে অদৃশ্য হয়ে যায় এবং স্টাইলের ইনপুট / চিত্রটি জ্বলজ্বল করে তবে আপনি "ব্রাউজ করুন" বোতামটিতে ক্লিক করতে পারেন। যদি বোতামটি চিত্রের উপরে অবস্থিত থাকে তবে ব্যবহারকারী চিত্রটিতে ক্লিক করে উপস্থিত হয় এবং সাধারণ ফাইল নির্বাচন উইন্ডোটি পায়। (দ্রষ্টব্য যে আপনি দৃশ্যমানতাটি ব্যবহার করতে পারবেন না: লুকানো, কারণ সত্যই অদৃশ্য উপাদানগুলিও অনাদায়ী and


6
এই দিনগুলির জন্য এটি অনেক বেশি কাজ। পরবর্তী উত্তরে জেসনির সমাধানের মতো প্রস্তুত কিছু ব্যবহার করা আরও বেশি অর্থবোধ করে।
এমজিপিপি

2
যদি আপনার উদাহরণে নেটস্কেপ সমর্থন করার জন্য সমর্থন অন্তর্ভুক্ত থাকে তবে এটি সম্ভবত আপ টু ডেট নয়।
টাইফোমিজম

22

আমার জন্য কাজ কর:

হালনাগাদ

jQuery প্লাগইন শৈলী :

// Based in: http://duckranger.com/2012/06/pretty-file-input-field-in-bootstrap/
// Version: 0.0.3
// Compatibility with: Bootstrap 3.2.0 and jQuery 2.1.1
// Use:
//     <input class="nice_file_field" type="file" data-label="Choose Document">
//     <script> $(".nice_file_field").niceFileField(); </script>
//
(function( $ ) {
  $.fn.niceFileField = function() {
    this.each(function(index, file_field) {
      file_field = $(file_field);
      var label = file_field.attr("data-label") || "Choose File";

      file_field.css({"display": "none"});

      nice_file_block_text  = '<div class="input-group nice_file_block">';
      nice_file_block_text += '  <input type="text" class="form-control">';
      nice_file_block_text += '  <span class="input-group-btn">';
      nice_file_block_text += '   <button class="btn btn-default nice_file_field_button" type="button">' + label + '</button>';
      nice_file_block_text += '  </span>';
      nice_file_block_text += '</div>';

      file_field.after(nice_file_block_text);

      var nice_file_field_button = file_field.parent().find(".nice_file_field_button");
      var nice_file_block_element = file_field.parent().find(".nice_file_block");

      nice_file_field_button.on("click", function(){ console.log("click"); file_field.click() } );
      file_field.change( function(){
        nice_file_block_element.find("input").val(file_field.val());
      });
    });
  };
})( jQuery );

17

অন্যান্য উত্তরগুলির অংশগুলি ব্যবহার করে সরলীকৃত উত্তর, প্রাথমিকভাবে ব্যবহারকারী 2309766 এবং ডটকোমস্পারস্টার।

বৈশিষ্ট্য:

  • বোতাম এবং ক্ষেত্রের জন্য বুটস্ট্র্যাপ বোতাম অ্যাডন ব্যবহার করে।
  • শুধুমাত্র একটি ইনপুট; একাধিক ইনপুট একটি ফর্ম দ্বারা বাছাই করা হবে।
  • "প্রদর্শন: কিছুই নয়" ব্যতীত কোনও অতিরিক্ত সিএসএস নেই; ফাইল ইনপুট আড়াল করতে।
  • লুকানো ফাইল ইনপুটটির জন্য দৃশ্যমান বোতামে আগুন ক্লিক করুন।
  • split ফাইল পাথ অপসারণ করতে regex এবং ডিলিমিটার '\' এবং '/' ব্যবহার করে।

কোড:

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="input-group">
  <span class="input-group-btn">
    <span class="btn btn-primary" onclick="$(this).parent().find('input[type=file]').click();">Browse</span>
    <input name="uploaded_file" onchange="$(this).parent().parent().find('.form-control').html($(this).val().split(/[\\|/]/).pop());" style="display: none;" type="file">
  </span>
  <span class="form-control"></span>
</div>


12

উপরের অন্যান্য পোস্টগুলির কিছু অনুপ্রেরণার সাথে, এখানে একটি সম্পূর্ণ সমাধান রয়েছে যা বর্তমান ফাইলে একটি লিঙ্ক অন্তর্ভুক্ত একটি ক্লিন ফাইল ইনপুট উইজেটের জন্য একটি ইনপুট-গ্রুপ-অ্যাডনের সাথে ফর্ম-নিয়ন্ত্রণ ক্ষেত্রের মতো দেখায় comb

.input-file { position: relative; margin: 60px 60px 0 } /* Remove margin, it is just for stackoverflow viewing */
.input-file .input-group-addon { border: 0px; padding: 0px; }
.input-file .input-group-addon .btn { border-radius: 0 4px 4px 0 }
.input-file .input-group-addon input { cursor: pointer; position:absolute; width: 72px; z-index:2;top:0;right:0;filter: alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0; background-color:transparent; color:transparent; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<div class="input-group input-file">
  <div class="form-control">
    <a href="/path/to/your/current_file_name.pdf" target="_blank">current_file_name.pdf</a>
  </div>
  <span class="input-group-addon">
    <a class='btn btn-primary' href='javascript:;'>
      Browse
      <input type="file" name="field_name" onchange="$(this).parent().parent().parent().find('.form-control').html($(this).val());">
    </a>
  </span>
</div>


9

এটি আমার পক্ষে নিখুঁতভাবে কাজ করে

<span>
    <input  type="file" 
            style="visibility:hidden; width: 1px;" 
            id='${multipartFilePath}' name='${multipartFilePath}'  
            onchange="$(this).parent().find('span').html($(this).val().replace('C:\\fakepath\\', ''))"  /> <!-- Chrome security returns 'C:\fakepath\'  -->
    <input class="btn btn-primary" type="button" value="Upload File.." onclick="$(this).parent().find('input[type=file]').click();"/> <!-- on button click fire the file click event -->
    &nbsp;
    <span  class="badge badge-important" ></span>
</span>

9

টুইটার বুটস্ট্র্যাপ ফাইল ইনপুট চেক করুন । এটি খুব সহজ সমাধান ব্যবহার করে, কেবল একটি জাভাস্ক্রিপ্ট ফাইল যুক্ত করুন এবং নিম্নলিখিত কোডটি পেস্ট করুন:

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

লিঙ্কটি ভাঙা হয়েছে (জুলাই 2019)
তবুও 28

@ তবুও৯৯৯ হ্যাঁ, এটি এখন ভেঙে গেছে
Monsur.hoq

@ তবুও 99, আমি লিঙ্কটি পরিবর্তন করেছি changed এখনই চেক করুন।
Monsur.hoq

6

গ্রহণযোগ্য ফলাফল সহ একটি সহজ সমাধান:

<input type="file" class="form-control">

এবং শৈলী:

input[type=file].form-control {
    height: auto;
}

5

একাধিক আপলোডের সমাধান

আমি একাধিক আপলোড অন্তর্ভুক্ত করতে পূর্ববর্তী দুটি উত্তর টুইট করেছি। এই মাত্রায় লেবেলটি ফাইলের নাম দেখায়, যদি কেবলমাত্র একটি নির্বাচিত হয়, বা x filesবিপরীত ক্ষেত্রে।

<label class="btn btn-primary" for="my-file-selector">
    <input id="my-file-selector" type="file" multiple="multiple" style="display:none"
        onchange="$('#upload-file-info').html(
            (this.files.length > 1) ? this.files.length + ' files' : this.files[0].name)">                     
    Files&hellip;
</label>
<span class='label label-info' id="upload-file-info"></span>

এখানে চিত্র বর্ণনা লিখুন

এটি বোতামের পাঠ্য এবং শ্রেণি পরিবর্তন করতেও প্রয়োগ হতে পারে।

<label class="btn btn-primary" for="multfile">
    <input id="multfile" type="file" multiple="multiple" style="display:none"
        onchange="$('#multfile-label').html(
            (this.files.length == 1) ? this.files[0].name : this.files.length + ' files');
            $(this).parent().addClass('btn-success')">
    <span id="multfile-label">Files&hellip;</span>
</label>

এখানে চিত্র বর্ণনা লিখুন


4

আমি কেবলমাত্র চিত্রগুলি গ্রহণ করতে একটি কাস্টম আপলোড বোতাম তৈরি করেছি, যা আপনার প্রয়োজন অনুযায়ী পরিবর্তন করা যেতে পারে।

আশাকরি এটা সাহায্য করবে!! :)

(ব্যবহৃত বুটস্ট্র্যাপ কাঠামো)

Codepen-লিঙ্ক

এইচটিএমএল

<center>
 <br />
 <br />
 <span class="head">Upload Button Re-Imagined</span>
 <br />
 <br />
 <div class="fileUpload blue-btn btn width100">
   <span>Upload your Organizations logo</span>
   <input type="file" class="uploadlogo" />
 </div>
</center>

সিএসএস

 .head {
   font-size: 25px;
   font-weight: 200;
 }

 .blue-btn:hover,
 .blue-btn:active,
 .blue-btn:focus,
 .blue-btn {
   background: transparent;
   border: solid 1px #27a9e0;
   border-radius: 3px;
   color: #27a9e0;
   font-size: 16px;
   margin-bottom: 20px;
   outline: none !important;
   padding: 10px 20px;
 }

 .fileUpload {
   position: relative;
   overflow: hidden;
   height: 43px;
   margin-top: 0;
 }

 .fileUpload input.uploadlogo {
   position: absolute;
   top: 0;
   right: 0;
   margin: 0;
   padding: 0;
   font-size: 20px;
   cursor: pointer;
   opacity: 0;
   filter: alpha(opacity=0);
   width: 100%;
   height: 42px;
 }


 /*Chrome fix*/

 input::-webkit-file-upload-button {
   cursor: pointer !important;
 }

জাতীয়

// You can modify the upload files to pdf's, docs etc
//Currently it will upload only images
$(document).ready(function($) {

  // Upload btn
  $(".uploadlogo").change(function() {
    readURL(this);
  });

  function readURL(input) {
    var url = input.value;
    var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
    if (input.files && input.files[0] && (ext == "png" || ext == "jpeg" || ext == "jpg" || ext == "gif" || ext == "svg")) {
      var path = $('.uploadlogo').val();
      var filename = path.replace(/^.*\\/, "");
      $('.fileUpload span').html('Uploaded logo : ' + filename);
      // console.log(filename);
    } else {
      $(".uploadlogo").val("");
      $('.fileUpload span').html('Only Images Are Allowed!');
    }
  }
});

4

এটি আমার কাছে সেরা ফাইল আপলোড শৈলী:

<div class="fileupload fileupload-new" data-provides="fileupload">
  <div class="input-append">
    <div class="uneditable-input span3"><i class="icon-file fileupload-exists"></i> <span class="fileupload-preview"></span></div><span class="btn btn-file"><span class="fileupload-new">Select file</span><span class="fileupload-exists">Change</span><input type="file" /></span><a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
  </div>
</div>

আপনি এখানে ডেমো এবং আরও শৈলী পেতে পারেন:

http://www.jasny.net/bootstrap/javascript/#fileinput

তবে এটি ব্যবহার করে আপনার জেসি বুটস্ট্র্যাপ ফাইলগুলির সাথে টুইটার বুটস্ট্র্যাপটি প্রতিস্থাপন করা উচিত ..

শুভেচ্ছা।


4

একেবারে উজ্জ্বল @ ক্লাভিস্কা সমাধানের ভিত্তিতে, যার কাছে সমস্ত creditণ owedণী।

বৈধতা এবং সহায়তা পাঠ্যের সাথে সম্পূর্ণ বৈশিষ্ট্যযুক্ত বুটস্ট্র্যাপ 4 ফাইল ইনপুট।

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

ফাইল ইনপুট তিনটি অবস্থা

তিনটি সম্ভাব্য রাজ্য হ'ল ডামি এইচটিএমএল ইনপুট ট্যাগ অ্যাট্রিবিউট requiredসেটটি সহ-বৈধ, বৈধ এবং অবৈধ ।

এখানে চিত্র বর্ণনা লিখুন

ইনপুটটির জন্য এইচটিএমএল মার্কআপ

আমরা কেবলমাত্র 2 টি কাস্টম ক্লাস প্রবর্তন করি input-file-dummyএবং input-file-btnপছন্দসই আচরণটি সঠিকভাবে স্টাইল এবং তারের জন্য করি। বাকি সমস্তগুলি স্ট্যান্ডার্ড বুটস্ট্র্যাপ 4 মার্কআপ।

<div class="input-group">
  <input type="text" class="form-control input-file-dummy" placeholder="Choose file" aria-describedby="fileHelp" required>
  <div class="valid-feedback order-last">File is valid</div>
  <div class="invalid-feedback order-last">File is required</div>
  <label class="input-group-append mb-0">
    <span class="btn btn-primary input-file-btn">
      Browse… <input type="file" hidden>
    </span>
  </label>
</div>
<small id="fileHelp" class="form-text text-muted">Choose any file you like</small>

জাভাস্ক্রিপ্ট আচরণগত বিধান

আসল উদাহরণ অনুসারে, ডামি ইনপুটটি কেবল পঠন করা দরকার, যাতে কেবলমাত্র ওপেন ফাইল ডায়ালগের মাধ্যমে পরিবর্তিত হতে পারে এমন ইনপুট পরিবর্তন থেকে ব্যবহারকারীকে আটকাতে। দুর্ভাগ্যক্রমে বৈধতা readonlyক্ষেত্রগুলিতে ঘটে না তাই আমরা ফোকাস এবং অস্পষ্টতার উপর ইনপুটটির সম্পাদনাযোগ্যতা টগল করি ( jquery ইভেন্টগুলি onfocusin এবংonfocusout ) এবং নিশ্চিত করুন যে এটি আবার একবার একটি ফাইল নির্বাচন করা হয় validatable হয়ে যায়।

পাঠ্য ক্ষেত্রটিকে ক্লিকযোগ্য করে তোলা ছাড়াও, বোতামটির ক্লিক ইভেন্টটি ট্রিগার করে, ডামি ক্ষেত্রের জনসংখ্যার বাকী কার্যকারিতা @ ক্লেভিস্কা দ্বারা কল্পনা করা হয়েছিল।

$(function () {
  $('.input-file-dummy').each(function () {
    $($(this).parent().find('.input-file-btn input')).on('change', {dummy: this}, function(ev) {
      $(ev.data.dummy)
        .val($(this).val().replace(/\\/g, '/').replace(/.*\//, ''))
        .trigger('focusout');
    });
    $(this).on('focusin', function () {
        $(this).attr('readonly', '');
      }).on('focusout', function () {
        $(this).removeAttr('readonly');
      }).on('click', function () {
        $(this).parent().find('.input-file-btn').click();
      });
  });
});

কাস্টম শৈলী টুইটগুলি

সর্বাধিক গুরুত্বপূর্ণ আমরা readonlyক্ষেত্রটি ধূসর ব্যাকগ্রাউন্ড এবং সাদাদের মধ্যে লাফিয়ে তুলতে চাই না তাই আমরা নিশ্চিত করি যে এটি সাদা থাকে। স্প্যান বোতামটিতে পয়েন্টার কার্সার নেই তবে আমাদের যাইহোক ইনপুটটির জন্য একটি যুক্ত করতে হবে।

.input-file-dummy, .input-file-btn {
  cursor: pointer;
}
.input-file-dummy[readonly] {
  background-color: white;
}

nJoy!



2

/ * * বুটস্ট্র্যাপ 3 ফাইল স্টাইল * http://dev.tudosobreweb.com.br/bootstrap-filestyle/ * * কপিরাইট (সি) 2013 মার্কাস ভিনিসিয়াস দা সিলভা লিমা * আপডেট বুটস্ট্র্যাপ 3 পাওলো হেনরিক ফক্সার * সংস্করণ 2.0.0 * লাইসেন্সযুক্ত এমআইটি লাইসেন্সের আওতায়। * * /

(function ($) {
"use strict";

var Filestyle = function (element, options) {
    this.options = options;
    this.$elementFilestyle = [];
    this.$element = $(element);
};

Filestyle.prototype = {
    clear: function () {
        this.$element.val('');
        this.$elementFilestyle.find(':text').val('');
    },

    destroy: function () {
        this.$element
            .removeAttr('style')
            .removeData('filestyle')
            .val('');
        this.$elementFilestyle.remove();
    },

    icon: function (value) {
        if (value === true) {
            if (!this.options.icon) {
                this.options.icon = true;
                this.$elementFilestyle.find('label').prepend(this.htmlIcon());
            }
        } else if (value === false) {
            if (this.options.icon) {
                this.options.icon = false;
                this.$elementFilestyle.find('i').remove();
            }
        } else {
            return this.options.icon;
        }
    },

    input: function (value) {
        if (value === true) {
            if (!this.options.input) {
                this.options.input = true;
                this.$elementFilestyle.prepend(this.htmlInput());

                var content = '',
                    files = [];
                if (this.$element[0].files === undefined) {
                    files[0] = {'name': this.$element[0].value};
                } else {
                    files = this.$element[0].files;
                }

                for (var i = 0; i < files.length; i++) {
                    content += files[i].name.split("\\").pop() + ', ';
                }
                if (content !== '') {
                    this.$elementFilestyle.find(':text').val(content.replace(/\, $/g, ''));
                }
            }
        } else if (value === false) {
            if (this.options.input) {
                this.options.input = false;
                this.$elementFilestyle.find(':text').remove();
            }
        } else {
            return this.options.input;
        }
    },

    buttonText: function (value) {
        if (value !== undefined) {
            this.options.buttonText = value;
            this.$elementFilestyle.find('label span').html(this.options.buttonText);
        } else {
            return this.options.buttonText;
        }
    },

    classButton: function (value) {
        if (value !== undefined) {
            this.options.classButton = value;
            this.$elementFilestyle.find('label').attr({'class': this.options.classButton});
            if (this.options.classButton.search(/btn-inverse|btn-primary|btn-danger|btn-warning|btn-success/i) !== -1) {
                this.$elementFilestyle.find('label i').addClass('icon-white');
            } else {
                this.$elementFilestyle.find('label i').removeClass('icon-white');
            }
        } else {
            return this.options.classButton;
        }
    },

    classIcon: function (value) {
        if (value !== undefined) {
            this.options.classIcon = value;
            if (this.options.classButton.search(/btn-inverse|btn-primary|btn-danger|btn-warning|btn-success/i) !== -1) {
                this.$elementFilestyle.find('label').find('i').attr({'class': 'icon-white '+this.options.classIcon});
            } else {
                this.$elementFilestyle.find('label').find('i').attr({'class': this.options.classIcon});
            }
        } else {
            return this.options.classIcon;
        }
    },

    classInput: function (value) {
        if (value !== undefined) {
            this.options.classInput = value;
            this.$elementFilestyle.find(':text').addClass(this.options.classInput);
        } else {
            return this.options.classInput;
        }
    },

    htmlIcon: function () {
        if (this.options.icon) {
            var colorIcon = '';
            if (this.options.classButton.search(/btn-inverse|btn-primary|btn-danger|btn-warning|btn-success/i) !== -1) {
                colorIcon = ' icon-white ';
            }

            return '<i class="'+colorIcon+this.options.classIcon+'"></i> ';
        } else {
            return '';
        }
    },

    htmlInput: function () {
        if (this.options.input) {
            return '<input type="text" class="'+this.options.classInput+'" style="width: '+this.options.inputWidthPorcent+'% !important;display: inline !important;" disabled> ';
        } else {
            return '';
        }
    },

    constructor: function () {
        var _self = this,
            html = '',
            id = this.$element.attr('id'),
            files = [];

        if (id === '' || !id) {
            id = 'filestyle-'+$('.bootstrap-filestyle').length;
            this.$element.attr({'id': id});
        }

        html = this.htmlInput()+
             '<label for="'+id+'" class="'+this.options.classButton+'">'+
                this.htmlIcon()+
                '<span>'+this.options.buttonText+'</span>'+
             '</label>';

        this.$elementFilestyle = $('<div class="bootstrap-filestyle" style="display: inline;">'+html+'</div>');

        var $label = this.$elementFilestyle.find('label');
        var $labelFocusableContainer = $label.parent();

        $labelFocusableContainer
            .attr('tabindex', "0")
            .keypress(function(e) {
                if (e.keyCode === 13 || e.charCode === 32) {
                    $label.click();
                }
            });

        // hidding input file and add filestyle
        this.$element
            .css({'position':'absolute','left':'-9999px'})
            .attr('tabindex', "-1")
            .after(this.$elementFilestyle);

        // Getting input file value
        this.$element.change(function () {
            var content = '';
            if (this.files === undefined) {
                files[0] = {'name': this.value};
            } else {
                files = this.files;
            }

            for (var i = 0; i < files.length; i++) {
                content += files[i].name.split("\\").pop() + ', ';
            }

            if (content !== '') {
                _self.$elementFilestyle.find(':text').val(content.replace(/\, $/g, ''));
            }
        });

        // Check if browser is Firefox
        if (window.navigator.userAgent.search(/firefox/i) > -1) {
            // Simulating choose file for firefox
            this.$elementFilestyle.find('label').click(function () {
                _self.$element.click();
                return false;
            });
        }
    }
};

var old = $.fn.filestyle;

$.fn.filestyle = function (option, value) {
    var get = '',
        element = this.each(function () {
            if ($(this).attr('type') === 'file') {
                var $this = $(this),
                    data = $this.data('filestyle'),
                    options = $.extend({}, $.fn.filestyle.defaults, option, typeof option === 'object' && option);

                if (!data) {
                    $this.data('filestyle', (data = new Filestyle(this, options)));
                    data.constructor();
                }

                if (typeof option === 'string') {
                    get = data[option](value);
                }
            }
        });

    if (typeof get !== undefined) {
        return get;
    } else {
        return element;
    }
};

$.fn.filestyle.defaults = {
    'buttonText': 'Escolher arquivo',
    'input': true,
    'icon': true,
    'inputWidthPorcent': 65,
    'classButton': 'btn btn-primary',
    'classInput': 'form-control file-input-button',
    'classIcon': 'icon-folder-open'
};

$.fn.filestyle.noConflict = function () {
    $.fn.filestyle = old;
    return this;
};

// Data attributes register
$('.filestyle').each(function () {
    var $this = $(this),
        options = {
            'buttonText': $this.attr('data-buttonText'),
            'input': $this.attr('data-input') === 'false' ? false : true,
            'icon': $this.attr('data-icon') === 'false' ? false : true,
            'classButton': $this.attr('data-classButton'),
            'classInput': $this.attr('data-classInput'),
            'classIcon': $this.attr('data-classIcon')
        };

    $this.filestyle(options);
});
})(window.jQuery);

2

আমি @ ক্লাভিস্কা উত্তরটি পরিবর্তন করেছি এবং আমার পছন্দ মতো কাজ করি (বুটস্ট্র্যাপ 3, 4 পরীক্ষা করা হয়নি):

<label class="btn btn-default">
    <span>Browse</span>
    <input type="file" style="display: none;" onchange="$(this).prev('span').text($(this).val()!=''?$(this).val():'Browse')">
</label>

2

এখানে চিত্র বর্ণনা লিখুন

নিম্নলিখিত কোডটি ছবিটির উপরে তৈরি করে

এইচটিএমএল

<form>
<div class="row">
<div class="col-lg-6">
<label for="file">
<div class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Browse</button>
</span>
<input type="text" class="form-control" id="info" readonly="" style="background: #fff;" placeholder="Search for...">
</div><!-- /input-group -->
</label>
</div><!-- /.col-lg-6 -->
</div>

</div>
<input type="file" style="display: none;" onchange="$('#info').val($(this).val().split(/[\\|/]/).pop()); " name="file" id="file">
</form>

জাভাস্ক্রিপ্ট

<script type="text/javascript">

$(function() {
    $("label[for=file]").click(function(event) {
        event.preventDefault();
        $("#file").click();
    });
});

</script>

1

আমারও একই সমস্যা, এবং আমি এটির মতো চেষ্টা করে দেখি।

<div>
<button type='button' class='btn btn-info btn-file'>Browse</button>
<input type='file' name='image'/>
</div>

সিএসএস

<style>
.btn-file {
    position:absolute;
}
</style>

জেএস

<script>
$(document).ready(function(){
    $('.btn-file').click(function(){
        $('input[name="image"]').click();
    });
});
</script>

দ্রষ্টব্য: বোতাম .btn-file অবশ্যই ইনপুট ফাইলের মতো একই ট্যাগে থাকা উচিত

আশা করি আপনি সেরা সমাধানটি খুঁজে পেয়েছেন ...


1

বুটস্ট্র্যাপে অনুসরণ করার চেষ্টা করুন v.3.3.4

<div>
    <input id="uplFile" type="file" style="display: none;">

    <div class="input-group" style="width: 300px;">
        <div  id="btnBrowse"  class="btn btn-default input-group-addon">Select a file...</div>
        <span id="photoCover" class="form-control">
    </div>
</div>

<script type="text/javascript">
    $('#uplFile').change(function() {
        $('#photoCover').text($(this).val());
    });

    $('#btnBrowse').click(function(){
        $('#uplFile').click();
    });
</script>

1

এখানে বিকল্প কৌশলটি, এটি সেরা সমাধান নয় তবে এটি আপনাকে একটি পছন্দ দেয়

এইচটিএমএল কোড:

<button clss="btn btn-primary" id="btn_upload">Choose File</button>
<input id="fileupload" class="hide" type="file" name="files[]">

javascript:

$("#btn_upload").click(function(e){
e.preventDefault();
$("#fileupload").trigger('click');
});

1

ক্লাভিস্কা উত্তরের বিষয়ে - আপনি যদি কোনও বেসিক ফাইল আপলোডে আপলোড করা ফাইলের নামটি দেখাতে চান তবে আপনি ইনপুট onchangeইভেন্টে এটি করতে পারেন । কেবল এই কোডটি ব্যবহার করুন:

 <label class="btn btn-default">
                    Browse...
                    <span id="uploaded-file-name" style="font-style: italic"></span>
                    <input id="file-upload" type="file" name="file"
                           onchange="$('#uploaded-file-name').text($('#file-upload')[0].value);" hidden>
 </label>

এই jquery জেএস কোড দায়ী, আপলোড করা ফাইলের নাম পুনরুদ্ধার করবে:

$('#file-upload')[0].value

অথবা ভ্যানিলা জেএস সহ:

document.getElementById("file-upload").value

উদাহরণ


1

আমি ভেবেছিলাম যে আমি আমার থ্রিপেন্সটি যুক্ত করব, কেবলমাত্র এটি বলতে কীভাবে ডিফল্ট .custom-file-labelএবং custom-file-inputBS4 ফাইল ইনপুট এবং কীভাবে এটি ব্যবহার করা যায়।

পরবর্তী শ্রেণীটি ইনপুট গ্রুপে রয়েছে এবং এটি দৃশ্যমান নয় is যদিও পূর্বেরটি দৃশ্যমান লেবেল এবং এতে একটি রয়েছে: সিউডোলেমেন্টের পরে যা বোতামটির মতো দেখাচ্ছে।

<div class="custom-file">
<input type="file" class="custom-file-input" id="upload">
<label class="custom-file-label" for="upload">Choose file</label>
</div>

আপনি psuedoe উপাদানগুলিতে ক্লাস যুক্ত করতে পারবেন না, তবে আপনি সেগুলি CSS (বা SASS) এ স্টাইল করতে পারেন।

.custom-file-label:after {
    color: #fff;
    background-color: #1e7e34;
    border-color: #1c7430;
    pointer: cursor;
}

0

কোনও অভিনব শিজ প্রয়োজন:

এইচটিএমএল:

<form method="post" action="/api/admin/image" enctype="multipart/form-data">
    <input type="hidden" name="url" value="<%= boxes[i].url %>" />
    <input class="image-file-chosen" type="text" />
    <br />
    <input class="btn image-file-button" value="Choose Image" />
    <input class="image-file hide" type="file" name="image"/> <!-- Hidden -->
    <br />
    <br />
    <input class="btn" type="submit" name="image" value="Upload" />
    <br />
</form>

জাতীয়:

$('.image-file-button').each(function() {
      $(this).off('click').on('click', function() {
           $(this).siblings('.image-file').trigger('click');
      });
});
$('.image-file').each(function() {
      $(this).change(function () {
           $(this).siblings('.image-file-chosen').val(this.files[0].name);
      });
});

সতর্কতা: প্রশ্নের মধ্যে থাকা তিনটি ফর্ম উপাদানগুলি একে অপরের ভাইবোন হতে হবে (।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.