এইচটিএমএল কাস্টম মান প্রবেশ করার বিকল্পের সাথে নির্বাচন করুন


104

আমি একটি ইনপুট ক্ষেত্র চাই যা ব্যবহারকারীরা কাস্টম পাঠ্য মান প্রবেশ করতে পারে বা ড্রপ ডাউন থেকে চয়ন করতে পারে। একটি নিয়মিত <select>শুধুমাত্র ড্রপ ডাউন বিকল্প দেয়।

আমি কীভাবে <select>গ্রহণযোগ্য কাস্টম মান করতে পারি ? যেমন: ফোর্ড?

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

আপনি জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন পরিবর্তনশীল একটি বিকল্প যোগ করতে সিলেক্ট কিন্তু এই তথ্য ব্যবহার করা একটি বাস্তব ব্যথা হয়ে যাবে।
ডেভিড

আমি আমার ওয়েবসাইট Finnmglas.com/contact এ কাস্টম মানগুলির জন্য এই বিকল্পটি যুক্ত করি নি তবে কেউ কাস্টম মানের সাথে আমার সাথে যোগাযোগ করেছেন। এটি এত অদ্ভুত
ফিনমগ্লাস

উত্তর:


249

এইচটিএমএল 5 এর একটি অন্তর্নির্মিত কম্বো বাক্স রয়েছে। আপনি একটি পাঠ্য inputএবং একটি তৈরি datalist। তারপরে আপনি এর মানটির সাথে listএকটিতে একটি বৈশিষ্ট্য যুক্ত করুন ।inputiddatalist

আপডেট: মার্চ 2019 পর্যন্ত সমস্ত বড় ব্রাউজার (বর্তমানে সাফারি 12.1 এবং আইওএস সাফারি 12.3 সহ) datalistএই কার্যকারিতার জন্য প্রয়োজনীয় স্তরে সহায়তা করে। বিস্তারিত ব্রাউজার সমর্থনের জন্য ক্যানিউজ দেখুন ।

দেখে মনে হচ্ছে:

<input type="text" list="cars" />
<datalist id="cars">
  <option>Volvo</option>
  <option>Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</datalist>


4
এই বৈশিষ্ট্যটি কেবল ব্রাউজারগুলির প্রায় 50% দ্বারা সমর্থিত। এটি সর্বশেষতম ফায়ারফক্স, ক্রোম এবং অপেরা সমর্থন করে; আইই, সাফারি এবং মোবাইল ব্রাউজারগুলি তা করে না। Http://caniuse.com/
marmarjnissen

4
এটি ২০১ 2016 সালের অর্ধেকেরও বেশি (২ বছরেরও বেশি পরে) এবং বেশিরভাগ ব্রাউজারগুলি কমপক্ষে উল্লেখযোগ্য বাগ ছাড়াই এখনও এটিকে পুরোপুরি সমর্থন করে না। কমপক্ষে কিছু সাফারি / সাফারি আইওএস ব্যতীত সামান্য কিছু সম্পর্কিত সাম্প্রতিক সংস্করণগুলিতে কাজ করবে তবে আপনার ব্যবহারের কেসগুলি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য আপনাকে পরীক্ষা করতে হবে। এটি এখনও সেরা উত্তর।
মাইকেল গসকিল

4
এটা আমার জন্য ভাল কাজ করে। অনেক ক্ষেত্রে আমাদের পুরানো ব্রাউজারগুলি সমর্থন করার দরকার নেই। আমি কেবল ইনপুট ফিল্ডের পটভূমিতে "ডাউন অ্যারো" চিত্রটি যুক্ত করেছিলাম এটির সম্প্রসারণযোগ্য একটি ইঙ্গিত ব্যবহারকারীদের দিতে। কোড (আপনার একটি সত্যিকারের চিত্রের ফাইল দরকার):<input type="text" list="cars" style="background:url('images/arrow_down.png') no-repeat right center">
ইউজিন কারদাশ

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

4
আমি সত্যিই এটি ব্যবহার করতে চেয়েছিলাম তবে আমার একটি ডিফল্ট মান সেট করা দরকার। ব্যবহারকারী কেবল ড্রপ ডাউন বনাম সমস্ত বিকল্পগুলিতে ডিফল্ট দেখতে পাবে (কারণ তারা ফিল্টার আউট হয়েছে)। সমস্ত অপশন দেখার আগে তাদের ইনপুট ক্ষেত্রটি সাফ করার জন্য তাদের জানতে হবে।
জাস্টিন

26

অ্যালেন সাকের সর্বশেষ জেএসফিডাল ফায়ারফক্সে আমার জন্য টগল করেনি, তাই আমি ভেবেছিলাম যে আমি একটি সাধারণ এইচটিএমএল / জাভাস্ক্রিপ্ট ওয়ার্কআউন্ড সরবরাহ করব যা ফর্মগুলির মধ্যে (জমা দেওয়ার বিষয়ে) সুন্দরভাবে কাজ করবে যেদিন পর্যন্ত সমস্ত ব্রাউজার / ডিভাইস দ্বারা ডেটালিস্ট ট্যাগটি গ্রহণ করা হয় না। আরও বিশদ বিবরণ এবং এটি ক্রিয়াতে দেখুন , এখানে যান: http://jsfiddle.net/6nq7w/4/ দ্রষ্টব্য: টগলিং ভাইবোনদের মধ্যে কোনও ফাঁকির অনুমতি দেবেন না!

<!DOCTYPE html>
<html>
<script>
function toggleField(hideObj,showObj){
  hideObj.disabled=true;        
  hideObj.style.display='none';
  showObj.disabled=false;   
  showObj.style.display='inline';
  showObj.focus();
}
</script>
<body>
<form name="BrowserSurvey" action="#">
Browser: <select name="browser" 
          onchange="if(this.options[this.selectedIndex].value=='customOption'){
              toggleField(this,this.nextSibling);
              this.selectedIndex='0';
          }">
            <option></option>
            <option value="customOption">[type a custom value]</option>
            <option>Chrome</option>
            <option>Firefox</option>
            <option>Internet Explorer</option>
            <option>Opera</option>
            <option>Safari</option>
        </select><input name="browser" style="display:none;" disabled="disabled" 
            onblur="if(this.value==''){toggleField(this,this.previousSibling);}">
<input type="submit" value="Submit">
</form>
</body>
</html>


আমি আবার সেই গতিবিধিতে যেতে চাই! ফায়ারফক্সের ডাইন সংস্করণ সেখানে সমর্থিত ছিল না! আমি এটির কিছু সংস্করণ দিয়ে পরীক্ষা করেছি যা আমি মনে করি না! কুদোস!
অ্যালেন সাক

আমি জানি না যে আমি এফএফের কোন সংস্করণটি চালু ছিলাম। আমি কেবল এফএফ 34.0 এ একবার দেখেছি এবং আমি এখন কার্যকারিতা পাচ্ছি, তাই কোনও উদ্বেগ নেই। তবে, ডিফল্ট টগলিং বিকল্প "অন্যান্য" অপসারণ করা যেতে পারে। আমি মানটি সম্পাদনা করে যখন "অন্যান্য" সরিয়ে ফেলি, তখন ড্রপমেনু নির্বাচন করার জন্য (সম্পাদনা বৈশিষ্ট্যটি অ্যাক্সেস করতে) কোনও স্বজ্ঞাত মান দেয় না। আমি এটি ব্যক্তিগত পছন্দ নেমে আসে বলে মনে করি। ক্ষেত্রটি সম্পাদনযোগ্য অবস্থায় ড্রপম্যানু তীরটি এখনও উপস্থিত থাকায় ব্যবহারকারীরা বুঝতে পারবেন না যে ক্ষেত্রটি সম্পাদনযোগ্য। তোমার দিকে কোন খোঁড়াখুঁড়ি নেই; কিছু প্রতিক্রিয়া। আমার স্নিপপেট <<> এর ভিতরে ক্ষেত্রের নামকরণকে বিবেচনা করে।
মিকম্যাকুসা

এই জ্ঞানসম্মত কিন্তু অনিবার্য (আমার কাছে) স্ক্রিপ্ট + এইচটিএমএলের শেষ ফলাফলটি নির্বাচিত বিকল্প মান, বা প্রবেশ করা পাঠ্যকে একই পৃষ্ঠার জিইটির সাথে ক্যোয়ারী স্ট্রিং হিসাবে সংযুক্ত করা হবে। কেউ কীভাবে কীভাবে পদক্ষেপটি পোষ্টে রূপান্তর করতে জানেন, তাই আমি একটি পিএইচপি ফাইলে মানটি ধরতে পারি এবং সেখানে এটি দিয়ে কিছু করতে পারি?
হান

এই স্ক্রিপ্টটি এইচটিএমএল ফর্ম জমা দেওয়ার সাথে আচরণ করার জন্য নির্দিষ্ট অভিপ্রায় নিয়ে রচনা করেছি। আপনি কি ফর্ম ট্যাগটিতে একটি বৈশিষ্ট্য হিসাবে পোস্ট পদ্ধতিটি ব্যবহার করছেন? @ আপনি যদি নিজের বিচ্ছিন্ন স্নিপেটের কোনও 3v4l.org লিঙ্ক তৈরি করেন তবে আমি দ্রুত নজর দিতে পারি এবং সম্ভবত পরামর্শ দিতে পারি।
মিকম্যাকুসা

4
ছেলে আমার কি বোবা লাগছে। আমি ফর্ম ট্যাগে একটি পদ্ধতি রাখতে ভুলে গেছি। এটি এই সামান্য সংশোধন সহ পোস্ট হিসাবে কাজ করেছে: <ফর্মের নাম = "ব্রাউজারসুরভি" পদ্ধতি = "পোস্ট" ক্রিয়া = "/ গেটিস.এফপি"> ... সুন্দর স্ক্রিপ্ট, মিকম্যাকুসা। আপনার ফলোআপ ইঙ্গিত জন্য ধন্যবাদ!
হান

16

jQuery সমাধান!

ডেমো: http://jsfiddle.net/69wP6/2/

নীচে অন্য একটি ডেমো (আপডেট!)

আমার কিছু ক্ষেত্রে একই বিকল্পের প্রয়োজন ছিল যখন আমার কিছু নির্দিষ্ট বিকল্প ছিল এবং আমি চাই যে অন্য একটি বিকল্প সম্পাদনাযোগ্য হোক! এই ক্ষেত্রে আমি একটি লুকানো ইনপুট তৈরি করেছি যা নির্বাচনের বিকল্পটি ওভারল্যাপ করবে এবং এটি সম্পাদনযোগ্য হবে এবং এটিকে সমস্ত নির্বিঘ্নে কার্যকর করার জন্য jQuery ব্যবহার করবে।

আমি আপনাদের সবার সাথে ফিডাল শেয়ার করছি!

এইচটিএমএল

<div id="billdesc">
    <select id="test">
      <option class="non" value="option1">Option1</option>
      <option class="non" value="option2">Option2</option>
      <option class="editable" value="other">Other</option>
    </select>
    <input class="editOption" style="display:none;"></input>
</div>

সিএসএস

body{
    background: blue;
}
#billdesc{
    padding-top: 50px;
}
#test{
    width: 100%;
    height: 30px;
}
option {
    height: 30px;
    line-height: 30px;
}

.editOption{
    width: 90%;
    height: 24px;
    position: relative;
    top: -30px

}

jQuery

var initialText = $('.editable').val();
$('.editOption').val(initialText);

$('#test').change(function(){
var selected = $('option:selected', this).attr('class');
var optionText = $('.editable').text();

if(selected == "editable"){
  $('.editOption').show();


  $('.editOption').keyup(function(){
      var editText = $('.editOption').val();
      $('.editable').val(editText);
      $('.editable').html(editText);
  });

}else{
  $('.editOption').hide();
}
});

সম্পাদনা: কিছু সাধারণ ছোঁয়া ডিজাইন অনুযায়ী যুক্ত করা হয়েছে, যাতে লোকেরা স্পষ্টভাবে দেখতে পারে যে ইনপুটটি কোথায় শেষ!

জেএস ফিডল: http://jsfiddle.net/69wP6/4/


11

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


9

যদি ডেটালিস্ট বিকল্পটি আপনার প্রয়োজনীয়তা পূরণ করে না, তবে সিলেক্ট 2 লাইব্রেরি এবং " ডায়নামিক অপশন তৈরি " দেখুন

$(".js-example-tags").select2({
  tags: true
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>


<select class="form-control js-example-tags">
  <option selected="selected">orange</option>
  <option>white</option>
  <option>purple</option>
</select>


0

উপরের সমাধানগুলির মধ্যে একটি (@ মিকম্যাকুসা) ব্যবহার করে, আমি হুক্স ব্যবহার করে 16.8+ প্রতিক্রিয়াতে একটি কাজের প্রোটোটাইপ তৈরি করেছি।

https://codesandbox.io/s/heuristic-dewdney-0h2y2

আমি আশা করি এটি কাউকে সাহায্য করবে


আমি সন্মানিত. আমি কেবল আমার রেকর্ডগুলি পরীক্ষা করেছিলাম এবং এটি স্ট্যাক ওভারফ্লোতে আমি এখানে 12 তম পোস্ট করেছি - মিলিয়ন বছর আগে মনে হচ্ছে।
মিকম্যাকুসা

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