আমি কীভাবে একটি 'নির্বাচন' বাক্সের জন্য একটি স্থানধারক করব?


1542

আমি পাঠ্য ইনপুটগুলির জন্য স্থানধারক ব্যবহার করছি যা ঠিকঠাক কাজ করছে। তবে আমি আমার নির্বাচিত বাক্সগুলির জন্য একটি স্থানধারকও ব্যবহার করতে চাই। অবশ্যই আমি এই কোডটি ব্যবহার করতে পারি:

<select>
    <option value="">Select your option</option>
    <option value="hurr">Durr</option>
</select>

তবে 'আপনার পছন্দ নির্বাচন করুন' লাইটগ্রির পরিবর্তে কালো। সুতরাং আমার সমাধান সম্ভবত সিএসএস-ভিত্তিক হতে পারে। jQuery খুব ভাল।

এটি কেবল ড্রপডাউনটিতে বিকল্পটি ধূসর করে তোলে (সুতরাং তীরটি ক্লিক করার পরে):

option:first {
    color: #999;
}

প্রশ্নটি: লোকেরা কীভাবে নির্বাচন বাক্সগুলিতে স্থানধারক তৈরি করে? এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে, চিয়ার্স।

এবং নির্বাচিত মানটি সর্বদা ধূসর হওয়ার ক্ষেত্রে এই ফলাফলগুলি ব্যবহার করে (বাস্তব বিকল্প নির্বাচন করার পরেও):

select {
    color: #999;
}

1
কেউ যদি এটি পড়েন - আমি ব্রাউজারের বৈধতা অনুসারে আধুনিক ব্রাউজারগুলির জন্য আরও সাধারণ সমাধান পোস্ট করেছি। 2020; বছর
জুরিক

উত্তর:


2972

একটি সিএসএসবিহীন - জাভাস্ক্রিপ্ট / jQuery উত্তর নেই:

<select>
    <option value="" disabled selected>Select your option</option>
    <option value="hurr">Durr</option>
</select>


134
ফায়ারফক্স (10) ডিফল্ট নির্বাচন (স্থানধারক) হিসাবে অক্ষম বিকল্পটি দেখায় না। এটি পরেরটি ডিফল্টরূপে দেখায়, এই ক্ষেত্রে "দুর"।
জার্নোয়ান

53
আমি সাধারণত অক্ষম এবং নির্বাচিত উভয়ই যুক্ত করি। এফএফ-তেও কাজ করার কথা মনে হচ্ছে।
নীলস্কে

11
<select> <option value="" disabled selected>Select your option</option> </select>
কলিপ্টো

183
এটি সঠিক উত্তর না হওয়ার কারণ হ'ল (আমার বিশ্বাস) প্রশ্নকর্তা অন্য মান নির্বাচন না করা অবধি নির্বাচনটি ধূসর হতে চান। এই উত্তরটি ড্রপ ডাউনকে বিকল্পটি ধূসর করে তোলে; কিন্তু না নির্বাচন উপাদান।
বিল

22
{অপশন [অক্ষম] {প্রদর্শন নির্বাচন করুন: কিছুই নয়; }}
ডিমেল ভারটিগো

821

আমি এই প্রশ্নটি পেরিয়ে গিয়েছি এবং ফায়ারফক্স এবং ক্রোমে কী কাজ করে তা এখানে রয়েছে (কমপক্ষে):

<style>
select:invalid { color: gray; }
</style>
<form>
<select required>
    <option value="" disabled selected hidden>Please Choose...</option>
    <option value="0">Open when powered (most valves do this)</option>
    <option value="1">Closed when powered, auto-opens when power is cut</option>
</select>
</form>

অক্ষম বিকল্প স্টপ <option>, হচ্ছে উভয় মাউস এবং কীবোর্ডের সঙ্গে নির্বাচিত শুধু ব্যবহার যেহেতু 'display:none'এখনো কীবোর্ড তীরচিহ্ন মাধ্যমে নির্বাচন করতে ব্যবহারকারী পারেন। 'display:none'শৈলী শুধু তালিকা বাক্স বর্ণন 'চমৎকার' করে তোলে।

দ্রষ্টব্য: value"স্থানধারক" বিকল্পে একটি খালি বৈশিষ্ট্য ব্যবহারের মাধ্যমে বৈধকরণ (প্রয়োজনীয় বৈশিষ্ট্য) "স্থানধারক" থাকার আশেপাশে কাজ করার অনুমতি দেয়, সুতরাং বিকল্পটি পরিবর্তিত না হলেও প্রয়োজনীয় হয়, ব্রাউজারটি ব্যবহারকারীকে একটি বিকল্প চয়ন করতে অনুরোধ করবে তালিকা থেকে।

আপডেট (জুলাই 2015):

এই পদ্ধতিটি নিম্নলিখিত ব্রাউজারগুলিতে কাজ করার বিষয়টি নিশ্চিত হয়েছে:

  • গুগল ক্রোম - v.43.0.2357.132
  • মজিলা ফায়ারফক্স - v.39.0
  • সাফারি - v.8.0.7 (স্থানধারক ড্রপডাউনতে দৃশ্যমান, তবে এটি নির্বাচনযোগ্য নয়)
  • মাইক্রোসফ্ট ইন্টারনেট এক্সপ্লোরার - v.11 (প্লেসোল্ডার ড্রপডাউনতে দৃশ্যমান তবে নির্বাচনযোগ্য নয়)
  • প্রকল্প স্পার্টান - v.15.10130 (স্থানধারক ড্রপডাউনতে দৃশ্যমান, তবে এটি নির্বাচনযোগ্য নয়)

আপডেট (অক্টোবর 2015):

আমি style="display: none"এইচটিএমএল 5 বৈশিষ্ট্যের পক্ষে সরালাম hiddenযার বিস্তৃত সমর্থন রয়েছে। hiddenউপাদান হিসেবে অনুরূপ বৈশিষ্ট্যগুলো রয়েছে display: noneসাফারি, ইন্টারনেট এক্সপ্লোরার, (প্রজেক্ট স্পার্টান পরীক্ষণ প্রয়োজন) যেখানে optionড্রপডাউন দৃশ্যমান, কিন্তু এটা নির্বাচনযোগ্য নয়।

আপডেট (জানুয়ারী ২০১ 2016):

selectউপাদানটি যখন হয় তখন এটি সিএসএস সিউডো-শ্রেণির requiredব্যবহারের অনুমতি দেয় :invalidযা আপনাকে select"স্থানধারক" অবস্থায় থাকা অবস্থায় উপাদানটিকে স্টাইল করতে দেয় । :invalidস্থানধারীর খালি মানের কারণে এখানে কাজ করে option

একবার মান নির্ধারিত হয়ে গেলে :invalidছদ্ম-শ্রেণি বাদ দেওয়া হবে। আপনি :validযদি চান তবে আপনি বিকল্পভাবেও ব্যবহার করতে পারেন।

বেশিরভাগ ব্রাউজার এই ছদ্ম-শ্রেণিকে সমর্থন করে। ইন্টারনেট এক্সপ্লোরার 10 এবং তারপরে। এটি কাস্টম স্টাইলযুক্ত selectউপাদানগুলির সাথে সেরা কাজ করে; কিছু ক্ষেত্রে যেমন (ক্রোম / সাফারিতে ম্যাক) আপনার selectবাক্সের ডিফল্ট উপস্থিতি পরিবর্তন করতে হবে যাতে নির্দিষ্ট স্টাইলগুলি প্রদর্শিত হয়, background-colorএবং color,। আপনি ডেভেলপার.মোজিলা.আর.গুতে সামঞ্জস্যতা সম্পর্কে কয়েকটি উদাহরণ এবং আরও কিছু পেতে পারেন ।

ক্রোমে নেটিভ এলিমেন্টের উপস্থিতি ম্যাক:

ক্রোমে বক্স নেটিভ ম্যাক নির্বাচন করুন

ক্রোমে পরিবর্তিত সীমান্ত উপাদান ম্যাক ব্যবহার করে:

ক্রোমে নির্বাচিত বাক্স ম্যাক পরিবর্তিত


5
@ জ্যাকোব ব্রাউজারগুলিতে আমি পরীক্ষা করেছি, 'প্রদর্শন: কিছুই নয়' শৈলী তালিকা থেকে "দয়া করে চয়ন করুন" লুকিয়ে রাখে যা এটিকে কেবল সুন্দর দেখায়।
উইলিয়াম

38
একটি অক্ষম বিকল্পটি পুনরায় নির্বাচন করা যাবে না তা উল্লেখ করা গুরুত্বপূর্ণ: নির্বাচনটি যদি বাধ্যতামূলক হয় তবে এটি ঠিক আছে - তবে নির্বাচনটি alচ্ছিক হলে তা নয়।
রবার্ট মার্ক ব্রাম

2
এক্সপ্লোরার 11 display:noneস্টাইল উপেক্ষা করে ।
T30

1
:invalidআমার কাজ করার আগে কাজ করার জন্য @ ম্যাটডাব্লুতে কুদোস ।
উইলিয়াম

3
আপনি এই ঝাঁকুনিরcolor মতো সমর্থনকারী ব্রাউজারগুলির বিকল্পগুলির "রিসেট" করতে একটি বিধিও যুক্ত করতে পারেন । এটি প্রতিস্থাপনে সহায়তা করবে যে প্রতিবন্ধী optionস্থানধারক। (সম্পাদনা করুন: আমি দেখছি ম্যাটডাব্লু ইতিমধ্যে তার উত্তরে এটি কভার করেছে)
শেগি

251

প্রয়োজনীয় ক্ষেত্রের জন্য, আধুনিক ব্রাউজারগুলিতে একটি খাঁটি সিএসএস সমাধান রয়েছে:

select:required:invalid {
  color: gray;
}
option[value=""][disabled] {
  display: none;
}
option {
  color: black;
}
<select required>
  <option value="" disabled selected>Select something...</option>
  <option value="1">One</option>
  <option value="2">Two</option>
</select>


7
আশ্চর্যজনক - এটি নীচে উত্তর ছিল (এখনও পর্যন্ত কোনও অগ্রগতি ছাড়াই) এটি ছিল সহজতম এবং বাস্তবে নিখুঁতভাবে কাজ করে। ধন্যবাদ! আশা করি এই উত্তরটি শীর্ষে উঠবে।
ড্যান নিসেনবাউম

2
@ ড্যানিসিসনবাউম খেলায় আমার খুব দেরি হয়েছিল, প্লাস এটির requiredকাজ করার দরকার নেই তাই আপনি যদি ক্ষেত্রটি optionচ্ছিক হতে চান তবে কোনও লাভ নেই।
ম্যাটডাব্লু 7'15

1
অন্যদিকে, :requiredনির্বাচক IE8 এবং নীচে সমর্থিত নয়। :invalidনির্বাচক IE9 এবং নিচে সমর্থিত নয়। quirksmode.org/css/selectors
ম্যাট ওয়াগনার

4
অ-প্রয়োজনীয় নির্বাচনের জন্য কোনও সমাধান নেই?
ব্যবহারকারী 3494047

1
@ ব্যবহারকারী 3494047 এই পদ্ধতির সাথে নয় - প্লেসহোল্ডার নির্বাচন করা হলে requiredব্রাউজারটি :invalidসিউডো-ক্লাস প্রয়োগ করার শর্ত দেয় । [value=""]প্রতিস্থাপন হিসাবে কাজ করবে না কারণ ব্যবহারকারীর মিথস্ক্রিয়ায় যা আপডেট হয় তা হ'ল মান সম্পত্তি তবে সিএসএস সিনট্যাক্সটি একটি (অস্তিত্বহীন) গুণকে বোঝায় ।
ম্যাটডাব্লু

105

এটার মতো কিছু:

এইচটিএমএল:

<select id="choice">
    <option value="0" selected="selected">Choose...</option>
    <option value="1">Something</option>
    <option value="2">Something else</option>
    <option value="3">Another choice</option>
</select>

সিএসএস:

#choice option { color: black; }
.empty { color: gray; }

javascript:

$("#choice").change(function () {
    if($(this).val() == "0") $(this).addClass("empty");
    else $(this).removeClass("empty")
});

$("#choice").change();

কাজের উদাহরণ: http://jsfiddle.net/Zmf6t/


8
এই আমি সম্প্রতি কি করেছি। তবে আমি একটি কীআপ হ্যান্ডলার যুক্ত করেছি যাতে কী-বোর্ডের মাধ্যমে একটি বিকল্প নির্বাচন করা হয় (তীর বা অক্ষরের শর্টকাটগুলি ব্যবহার করে) jsfiddle.net/Zmf6t/131
Radu

এটি আমাকে সঠিক ট্র্যাকের উপরে ফেলেছে ... তবে আমি মান = "" (উদ্ধৃতিগুলির মধ্যে কিছুই নেই) তৈরি করেছি যাতে জমা বোতামটি ক্লিক করার পরে এটি প্রথম বিকল্পটি যাচাই করতে ব্যর্থ হয়েছিল এবং একটি ব্রাউজার পপআপ আপনাকে অবহিত করে উপস্থিত হবে একটি বিকল্প নির্বাচন করতে ... ধন্যবাদ @ অ্যালবিরিও
ক্রেগ ওয়েন

আপনি কেন স্পষ্টভাবে পরিবর্তনের ফাংশনটি ডাকলেন।
চিরকাল

@ পূর্ববর্তী কারণ যেহেতু আমি নির্বাচনের পরিবর্তনের ইভেন্ট হ্যান্ডলারে সিএসএস ক্লাস সেট করেছি, সুতরাং আপনি যদি নিয়ন্ত্রণটি তৈরি করা হয় যখন স্টাইলটি প্রয়োগ না করা হয় ম্যানুয়ালি ইভেন্টটি উত্থাপন না করেন (ব্যবহারকারী কেবলমাত্র মানটি পরিবর্তন করলেই এটি প্রয়োগ করা হবে)।
আলবিরেও

এটি জিকিউরি ৩.৪.১-এ কাজ করছে না
জিওবুদেক্স

45

আমি optionনীচের মত একটি লুকানো অ্যাট্রিবিউট যুক্ত করেছি । এটা আমার জন্য ভাল কাজ করছে।

<select>
  <option hidden>Sex</option>
  <option>Male</option>
  <option>Female</option>
</select>


2
কেবল রেকর্ডের জন্য, এটি আমার পক্ষে কাজ করে না (ক্রোম উইন 10)।
ক্রিস

তবে আপনি এটি আনসেট করতে পারবেন না। আপনি একটি চয়ন করে শেষ করেন কিন্তু আপনি যদি নিজের মতামত পরিবর্তন করেন তবে আপনি পুনরায় সেট করতে পারবেন না।
থাইলিসিয়াস

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

35

ফায়ারফক্সে নীচের সমাধানটি কোনও জাভাস্ক্রিপ্ট ছাড়াই কাজ করে:

option[default] {
  display: none;
}
<select>
  <option value="" default selected>Select Your Age</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select>


26

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

এটা এখানে:

এইচটিএমএল:

<select class="place_holder dropdown">
    <option selected="selected" style=" display: none;">Sort by</option>
    <option>two</option>
    <option>something</option>
    <option>4</option>
    <option>5</option>
</select>

সিএসএস:

.place_holder {
    color: gray;
}
option {
    color: #000000;
}

javascript:

jQuery(".dropdown").change(function () {
    jQuery(this).removeClass("place_holder");
});

গ্রাহক প্রথম নির্বাচন করার পরে ধূসর বর্ণের কোনও প্রয়োজন নেই, তাই জাভাস্ক্রিপ্ট কোডটি ক্লাসটি সরিয়ে দেয় place_holder

ইন্টারনেট এক্সপ্লোরার ব্রাউজারের কাজ হিসাবে @ ব্যবহারকারী 1096901 কে ধন্যবাদ, place_holderপ্রথম বিকল্পটি আবার নির্বাচিত হলে আপনি আবার ক্লাস যুক্ত করতে পারেন :)


2
কিছু ব্রাউজারে তিনি এখনও ডিসপ্লেটি নির্বাচন করতে পারেন: কোনও বিকল্প নেই, কারণ এটি গোপন নয়।
শ্রেনেকেক

এর জন্য কাজটি হচ্ছে প্রথম বিকল্পটি নির্বাচিত হলে আবার "প্লেস_হোল্ডার" শ্রেণি যোগ করা :)
rramiii

23

কোনও জাভাস্ক্রিপ্ট বা সিএসএসের প্রয়োজন নেই, কেবল তিনটি বৈশিষ্ট্য:

<select>
    <option selected disabled hidden>Default Value</option>
    <option>Value 1</option>
    <option>Value 2</option>
    <option>Value 3</option>
    <option>Value 4</option>
</select>

এটি বিকল্পটি মোটেও প্রদর্শন করে না; এটি কেবল ডিফল্ট হিসাবে বিকল্পের মান সেট করে।

তবে, আপনি যদি ঠিক কোনও প্লেসোল্ডারকে পছন্দ করেন না যা বাকি রঙের মতো একই রঙের হয় তবে আপনি এটিকে এইভাবে ইনলাইন ঠিক করতে পারেন:

<!DOCTYPE html>
<html>
    <head>
        <title>Placeholder for select tag drop-down menu</title>
    </head>

    <body onload="document.getElementById('mySelect').selectedIndex = 0">
        <select id="mySelect" onchange="document.getElementById('mySelect').style.color = 'black'"     style="color: gray;    width: 150px;">
          <option value="" hidden>Select your beverage</option> <!-- placeholder -->
          <option value="water" style="color:black" >Water</option>
          <option value="milk" style="color:black" >Milk</option>
          <option value="soda" style="color:black" >Soda</option>
        </select>
    </body>
</html>

স্পষ্টতই, আপনি ফাংশনগুলি এবং কমপক্ষে নির্বাচনের সিএসএসকে পৃথক ফাইলগুলিতে আলাদা করতে পারেন।

দ্রষ্টব্য: ওনলোড ফাংশন একটি রিফ্রেশ বাগ সংশোধন করে।


গোপন বিকল্পটি যদি একমাত্র হয় তবে এটি কাজ করবে না
এরদানিস

তবে কেন আপনার একমাত্র বিকল্পের সাথে ড্রপ ডাউন মেনু থাকবে?
জ্যাকব স্নাইডার

আমার একটি ট্যাবড পপ-আপ রয়েছে এবং ট্যাব 3 থেকে ড্রপ ডাউন মেনু ট্যাব 2 থেকে ইনপুট নেয় যা এটি প্রদর্শিত হয়। আপনার উত্তরটি ভাল এবং এটি একটি কোণার ক্ষেত্রে, তবে আমি ডিফল্ট মানটি প্রথম বিকল্প হিসাবে প্রদর্শিত হবে বলে আশা করতাম, পরিবর্তে আপনি একটি ফাঁকা ড্রপ ডাউন পাবেন। এখানে দেখুন: jsfiddle.net/n66L7sza
এরিডানিস

এটি একটি ভাল পয়েন্ট, এক্ষেত্রে আপনি ড্রপডাউনটির দৈর্ঘ্যটি স্ক্যান করতে পারতেন, যদি এটি শূন্য হয় তবে লুকানো বৈশিষ্ট্যটি সরিয়ে ফেলুন
জ্যাকব স্নাইডার

এটি ম্যাকওএসে গুগল ক্রোম 65.0.3325.181 এ সঠিকভাবে কাজ করছে বলে মনে হচ্ছে না, এটি লুকানো এন্ট্রি দেখায় না এবং এটি নীচেরটিকে বেছে নেয়।
জেমি এইচ

19

ব্যবহারকারীর নির্বাচন বিকল্পগুলিতে স্থানধারকটি দেখতে পাওয়া উচিত নয়। আমি hiddenস্থানধারক বিকল্পের জন্য অ্যাট্রিবিউটটি ব্যবহার করার পরামর্শ দিচ্ছি , এবং selectedএই বিকল্পটির জন্য আপনাকে অ্যাট্রিবিউটের দরকার নেই । আপনি এটি প্রথম হিসাবে রাখতে পারেন।

select:not(:valid) {
  color: #999;
}
<select required>
    <option value="" hidden>Select your option</option>
    <option value="0">First option</option>
    <option value="1">Second option</option>
</select>


2
বা select:invalidবৈধ।
elquimista

2
অন্তত ক্রোমে তালিকার মধ্যে স্থানধারক পাঠ্যটির বৈশিষ্ট্য না থাকায় আমি এটি পুনরায় চাও।
জোরেড

নোট করুন যে শৈলীটি ছাড়া কাজ করে নাrequired
akmalhakimi1991

18

এখানে আমি ডেভিডের উত্তর (গৃহীত উত্তর) পরিবর্তন করেছি। তার উত্তরে, তিনি optionট্যাগটিতে অক্ষম এবং নির্বাচিত বৈশিষ্ট্যটি রেখেছিলেন , কিন্তু আমরা যখন লুকানো ট্যাগও রাখি তখন এটি আরও ভাল দেখায়।

optionট্যাগটিতে একটি অতিরিক্ত লুকানো বৈশিষ্ট্য যুক্ত করে , "ডুর" বিকল্পটি নির্বাচন করার পরে এটি "আপনার বিকল্পটি নির্বাচন করুন" বিকল্পটি পুনরায় নির্বাচন করা থেকে আটকাবে।

<select>
    <option value="" disabled selected hidden>Select your option</option>
    <option value="hurr">Durr</option>
</select>


আপডেটের জন্য ধন্যবাদ, তবে উত্তরটি কেন এটি আলাদা দেখায় তা এখনও ব্যাখ্যা করে না। উদাহরণস্বরূপ, এই উত্তরটি "দুর" বিকল্পটি নির্বাচিত হওয়ার পরে পুনরায় নির্বাচনের থেকে "আপনার বিকল্পটি নির্বাচন করুন" বিকল্পটি বাধা দেয় । কোন বৈশিষ্ট্য এই আচরণের কারণ?
বিগ্রান

16

আমারটা এখানে:

select:focus option.holder {
  display: none;
}
<select>
    <option selected="selected" class="holder">Please select</option>
    <option value="1">Option #1</option>
    <option value="2">Option #2</option>

</select>


আপনি কেবল <option value="" selected disabled>Please select</option>প্রথম বিকল্প হিসাবে যুক্ত করতে পারেন ।
sstauross

এটি স্থানধারকটিকে হালকা ধূসর করে না।
ক্লো

12

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

select {
  color: grey;
}

option {
  color: black;
}

option[default] {
   display: none;
}
<select>
    <option value="" default selected>Select your option</option>
    <option value="hurr">Durr</option>
</select>


8
Durrআপনি এটি নির্বাচন করার পরে ধূসর হয়। এটি বদ্ধ নির্বাচিত বাক্সটি সর্বদা ধূসর হতে বাধ্য করে।
ক্লো

9

আপনি যদি কৌণিক ব্যবহার করে থাকেন তবে এইভাবে যান:

<select>
    <option [ngValue]="undefined"  disabled selected>Select your option</option>
    <option [ngValue]="hurr">Durr</option>
</select>


আপনি hiddenবৈশিষ্ট্যটি যুক্ত করতে পারেন যাতে বিকল্পটি খোলার সময় প্রদর্শিত না হয় select। তবে এই উত্তরের জন্য যে কোনও উপায়ে ধন্যবাদ, এটি আমার পক্ষে কাজ করেছিল।
ডিসিজি

5

এই HTML + CSSসমাধানটি আমার পক্ষে কাজ করেছে:

form select:invalid {
  color: gray;
}

form select option:first-child {
  color: gray;
}

form select:invalid option:not(:first-child) {
  color: black;
}
<form>
  <select required>
    <option value="">Select Planet...</option>
    <option value="earth">Earth</option>
    <option value="pandora">Pandora</option>
  </select>
</form>

শুভকামনা ...


এটি JQuery
3.4.1 এ

5

জাভাস্ক্রিপ্টে আর একটি সম্ভাবনা:

 $('body').on('change', 'select', function (ev){
    if($(this).find('option:selected').val() == ""){
        $(this).css('color', '#999');
        $(this).children().css('color', 'black');
    }
    else {
        $(this).css('color', 'black');
        $(this).children().css('color', 'black');
    }
});

JSFiddle


4

আমি গৃহীত সমাধানটি পছন্দ করি এবং এটি জাভাস্ক্রিপ্ট ছাড়াই দুর্দান্ত কাজ করে।

আমি কীভাবে একটি নিয়ন্ত্রিত-নির্বাচিত প্রতিক্রিয়া অংশের জন্য এই উত্তরটি গ্রহণ করেছি তা যুক্ত করতে চাই , কারণ এটি বের করার জন্য আমাকে কয়েকবার চেষ্টা করেছে। এটি অন্তর্ভুক্ত করা react-selectএবং এটি দিয়ে কাজ করা সত্যিই সহজ হবে তবে আপনি যদি এই সংগ্রহস্থলটি যে আশ্চর্যজনক কার্যকারিতা সরবরাহ করেন না তার প্রয়োজন না হয় যা আমি এই প্রকল্পের জন্য করি না, আমার বান্ডলে আর কোনও কিলোবাইট যুক্ত করার দরকার নেই no দ্রষ্টব্য, react-selectবিভিন্ন inputsএবং htmlউপাদানগুলির একটি জটিল সিস্টেমের মাধ্যমে নির্বাচিতগুলিতে স্থানধারকদের পরিচালনা করে।

প্রতিক্রিয়া হিসাবে, একটি নিয়ন্ত্রিত উপাদান জন্য , আপনি selectedআপনার বিকল্পগুলিতে বৈশিষ্ট্য যুক্ত করতে পারবেন না । প্রতিক্রিয়া হ'ল একটি পরিবর্তন হ্যান্ডলারের পাশাপাশি একটি valueবৈশিষ্ট্যের মাধ্যমে সিলেক্টের স্থিতি পরিচালনা করে select, যেখানে মানটি বিকল্পগুলির মধ্যে মান মানগুলির সাথে মিলিত হয়।

যেমন, উদাহরণস্বরূপ

<select value={this.state.selectValue} onChange={this.handleChange} required={true}>
    {options}
</select>

যেহেতু এটি অনুচিত হবে এবং প্রকৃতপক্ষে selectedবিকল্পগুলির মধ্যে একটিতে অ্যাট্রিবিউট যুক্ত করতে একটি ত্রুটি ছুঁড়ে ফেলবে , তবে কি হবে?

আপনি একবার এটি সম্পর্কে চিন্তা করলে উত্তরটি সহজ। যেহেতু আমরা আমাদের প্রথম চান optionহতে selectedসেইসাথে disabledএবং hidden, আমরা তিনটি কিছু করার প্রয়োজন:

  1. যোগ hiddenএবং disabledপ্রথম সংজ্ঞায়িত অ্যাট্রিবিউট option
  2. প্রথমটির মানটি optionখালি স্ট্রিং হিসাবে সেট করুন।
  3. মানটি selectখালি স্ট্রিং হতে শুরু করুন।
state = { selectValue = "" } // State or props or their equivalent

// In the render function
<select value={this.state.selectValue} onChange={this.handleChange} required={true}>
    <option key="someKey" value="" disabled="disabled" hidden="hidden">Select from Below</option>
    {renderOptions()}
</select>

উপরে আপনি উল্লিখিত অনুযায়ী নির্বাচন স্টাইল করতে পারেন (বা classNameযদি আপনি চান তবে একটি মাধ্যমে )।

select:invalid { color: gray; }

3

[type="text"]নির্বাচন করুন উপাদানগুলির জন্য ইনপুট স্টাইল প্লেসোল্ডার

নিম্নলিখিত input[type="text"]উপাদানটি কোনও উপাদান সম্পর্কিত যেমন একটি স্থানধারককে অনুকরণ করে :

$('.example').change(function () {
  $(this).css('color', $(this).val() === '' ? '#999' : '#555');
});
.example {
  color: #999;
}

.example > option {
  color: #555;
}

.example > option[value=""] {
  color: #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="example">
  <option value="">Select Option</option>
  <option>Option 1</option>
  <option>Option 2</option>
  <option>Option 3</option>
</select>


3

আমি এইচটিএমএলের এই টুকরোটির জন্য নির্বাচন না করা পর্যন্ত নির্বাচনটি ধূসর হতে চেয়েছিলাম:

<select>
  <option value="" disabled selected>Select your option</option>
  <option value="hurr">Durr</option>
</select>

আমি এই সিএসএস সংজ্ঞা যুক্ত করেছি:

select { color: grey; }
select:valid { color: black; }

এটি ক্রোম / সাফারি এবং সম্ভবত অন্যান্য ব্রাউজারগুলিতে প্রত্যাশার মতো কাজ করে তবে আমি চেক করি নি।


3

এখানে একটি সিএসএস সমাধান রয়েছে যা সুন্দরভাবে কাজ করে। উপাদানটি যুক্ত উপাদান ( পরে সিউডো-শ্রেণীর পরে ) যুক্ত হওয়ার পরে (এবং ধারকটির সাথে একেবারে সম্পর্কিত অবস্থানযুক্ত ) যুক্ত করা হয়।

এটি স্থানধারক বৈশিষ্ট্য থেকে এর পাঠ্য পেয়েছে যা আমি সংজ্ঞায়িত করেছি যেখানে আমি নির্দেশিকা ( অ্যাটর্নি (স্থানধারক) ) ব্যবহার করেছি। আরেকটি মূল বিষয় হ'ল পয়েন্টার-ইভেন্টগুলি: কোনওটি নয় - এটি স্থানধারক পাঠ্যের উপর ক্লিকগুলিকে নির্বাচনের মধ্য দিয়ে যেতে দেয়। অন্যথায় যদি ব্যবহারকারী পাঠ্যটি ক্লিক করে তবে এটি ডাউন হবে না।

আমি যোগ .empty আমার নির্বাচন নির্দেশ মধ্যে বর্গ নিজেকে, কিন্তু স্বাভাবিকভাবে আমি দেখি যে কৌণিক যোগ / অপসারণ .ng খালি আমার জন্য (আমি অনুমান কারণ আমি আমার কোড নমুনা কৌণিক সংস্করণ 1.2 ইনজেকশনের করছি)।

(নমুনাটিও দেখায় যে কীভাবে আপনার নিজস্ব কাস্টম ইনপুট তৈরি করতে AngularJS এ এইচটিএমএল উপাদানগুলি মোড়ানো যায়)

var app = angular.module("soDemo", []);
app.controller("soDemoController", function($scope) {
  var vm = {};
  vm.names = [{
      id: 1,
      name: 'Jon'
    },
    {
      id: 2,
      name: 'Joe'
    }, {
      id: 3,
      name: 'Bob'
    }, {
      id: 4,
      name: 'Jane'
    }
  ];
  vm.nameId;
  $scope.vm = vm;
});

app.directive('soSelect', function soSelect() {
  var directive = {
    restrict: 'E',
    require: 'ngModel',
    scope: {
      'valueProperty': '@',
      'displayProperty': '@',
      'modelProperty': '=',
      'source': '=',
    },
    link: link,
    template: getTemplate
  };
  return directive;


  /////////////////////////////////
  function link(scope, element, attrs, ngModelController) {
    init();
    return;


    ///////////// IMPLEMENTATION

    function init() {
      initDataBinding();
    }


    function initDataBinding() {
      ngModelController.$render = function() {
        if (scope.model === ngModelController.$viewValue) return;
        scope.model = ngModelController.$viewValue;
      }

      scope.$watch('model', function(newValue) {
        if (newValue === undefined) {
          element.addClass('empty');
          return;
        }
        element.removeClass('empty');
        ngModelController.$setViewValue(newValue);
      });
    }
  }


  function getTemplate(element, attrs) {
    var attributes = [
      'ng-model="model"',
      'ng-required="true"'
    ];

    if (angular.isDefined(attrs.placeholder)) {
      attributes.push('placeholder="{{placeholder}}"');
    }

    var ngOptions = '';

    if (angular.isDefined(attrs.valueProperty)) {
      ngOptions += 'item.' + attrs.valueProperty + ' as ';
    }

    ngOptions += 'item.' + attrs.displayProperty + ' for item in source';
    ngOptions += '"';
    attributes.push('ng-options="' + ngOptions + '"');

    var html = '<select ' + attributes.join(' ') + '></select>';

    return html;
  }
});
so-select {
  position: relative;
}

so-select select {
  font-family: 'Helvetica';
  display: inline-block;
  height: 24px;
  width: 200px;
  padding: 0 1px;
  font-size: 12px;
  color: #222;
  border: 1px solid #c7c7c7;
  border-radius: 4px;
}

so-select.empty:before {
  font-family: 'Helvetica';
  font-size: 12px;
  content: attr(placeholder);
  position: absolute;
  pointer-events: none;
  left: 6px;
  top: 3px;
  z-index: 0;
  color: #888;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="soDemo" ng-controller="soDemoController">
  <so-select value-property="id" display-property="name" source="vm.names" ng-model="vm.nameId" placeholder="(select name)"></so-select>
</div>


3

আমি বর্তমানে এগুলির কোনওটিই কাজ করতে পারি না, কারণ আমার জন্য এটি (1) প্রয়োজন হয় না এবং (2) ডিফল্ট নির্বাচনযোগ্যতে ফিরে আসার বিকল্পের প্রয়োজন। আপনি jQuery ব্যবহার করা হয় তাই এখানে একটি ভারী হাতে বিকল্প:

var $selects = $('select');
$selects.change(function () {
  var option = $('option:default', this);
  if(option && option.is(':selected')) {
    $(this).css('color', '#999');
  }
  else {
    $(this).css('color', '#555');
  }
});

$selects.each(function() {
  $(this).change();
});
option {
    color: #555;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="in-op">
    <option default selected>Select Option</option>
    <option>Option 1</option>
    <option>Option 2</option>
    <option>Option 3</option>
</select>


ধন্যবাদ, এটি আমার জন্য সেরা ছিল, যেমন আপনি বলেছিলেন ... নির্বাচিত উপাদানটি প্রয়োজনীয়।
মৌসা আলফাইল

3

আমি এইচটিএমএল / সিএসএস-কেবল সমাধানগুলিতেই সন্তুষ্ট নই, তাই আমি selectজাভাস্ক্রিপ্ট ব্যবহার করে একটি কাস্টম তৈরি করার সিদ্ধান্ত নিয়েছি ।

এটি এমনটি যা আমি গত ৩০ মিনিটে লিখেছি, সুতরাং এটি আরও উন্নত হতে পারে।

আপনাকে যা করতে হবে তা হ'ল কয়েকটি ডেটা অ্যাট্রিবিউট সহ একটি সাধারণ তালিকা তৈরি করা। কোডটি স্বয়ংক্রিয়ভাবে তালিকাটিকে একটি নির্বাচনযোগ্য ড্রপডাউনতে পরিণত করে। এটি inputনির্বাচিত মানটি ধরে রাখতে একটি গোপন যুক্ত করে, তাই এটি কোনও ফর্মে ব্যবহার করা যায়।

ইনপুট:

<ul class="select" data-placeholder="Role" data-name="role">
  <li data-value="admin">Administrator</li>
  <li data-value="mod">Moderator</li>
  <li data-value="user">User</li>
</ul>

আউটপুট:

<div class="ul-select-container">
    <input type="hidden" name="role" class="hidden">
    <div class="selected placeholder">
        <span class="text">Role</span>
        <span class="icon"></span>
    </div>
    <ul class="select" data-placeholder="Role" data-name="role">
        <li class="placeholder">Role</li>
        <li data-value="admin">Administrator</li>
        <li data-value="mod">Moderator</li>
        <li data-value="user">User</li>
    </ul>
</div>

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


আপডেট : আমি এটিকে উন্নত করেছি (উপরে / নিচে / কী কী ব্যবহার করে নির্বাচন করুন), আউটপুটটি কিছুটা সামান্য সাজিয়েছি এবং এটিকে একটি বস্তুতে পরিণত করেছি। বর্তমান আউটপুট:

<div class="li-select-container">
    <input type="text" readonly="" placeholder="Role" title="Role">
    <span class="arrow"></span>
    <ul class="select">
        <li class="placeholder">Role</li>
        <li data-value="admin">Administrator</li>
        <li data-value="mod">Moderator</li>
        <li data-value="user">User</li>
    </ul>
</div>

আরম্ভ:

new Liselect(document.getElementsByTagName("ul")[0]);

আরও পরীক্ষার জন্য: জেএসফিডাল , গিটহাব (নাম পরিবর্তন)।


আপডেট: আমি এটি আবার লিখেছি। একটি তালিকা ব্যবহার না করে, আমরা কেবল একটি নির্বাচন ব্যবহার করতে পারি। এইভাবে এটি জাভাস্ক্রিপ্ট ছাড়াই কাজ করবে (যদি এটি অক্ষম থাকে)।

ইনপুট:

<select name="role" data-placeholder="Role" required title="Role">
    <option value="admin">Administrator</option>
    <option value="mod">Moderator</option>
    <option>User</option>
</select>

new Advancelect(document.getElementsByTagName("select")[0]);

আউটপুট:

<div class="advanced-select">
    <input type="text" readonly="" placeholder="Role" title="Role" required="" name="role">
    <span class="arrow"></span>
    <ul>
        <li class="placeholder">Role</li>
        <li data-value="admin">Administrator</li>
        <li data-value="mod">Moderator</li>
        <li>User</li>
    </ul>
</div>

জেএসফিডল , গিটহাব


2

আপনার ফর্ম বৈধকরণ প্রয়োজন এবং আধুনিক ব্রাউজারগুলি এটিকে স্ক্র্যাচ থেকে সরবরাহ করে।

সুতরাং ব্যবহারকারী যাতে ক্ষেত্রটি নির্বাচন করতে না পারে সেদিকে আপনার খেয়াল রাখার দরকার নেই। কারণ যখন তিনি এটি করছেন, ব্রাউজারের বৈধতা তাকে বলবে যে এটি একটি ভুল নির্বাচন।

বৈধতা ফাংশন চেকভ্যালিডিটি () এ নির্মিত ব্রাউজারটি ।

বুটস্ট্র্যাপের একটি দুর্দান্ত উদাহরণও রয়েছে।

এইচটিএমএল

<form class="needs-validation">
  <select required>
    <option value="">Please select an option</option>
    <option value="1">Foo</option>
    <option value="2">Bar</option>
  </select>
<form>

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

form = document.getElementByClassName('needs-validation');
if(form.checkValidity() === true) {
  //form validation succeeded
} else {
  //form validation failed
}

1

আপনি ব্যবহার না করেই এটা করতে পারেন Javascriptশুধুমাত্র ব্যবহার HTMLআপনি সেট ডিফল্ট নির্বাচন বিকল্প প্রয়োজন disabled=""এবং selected=""নির্বাচন ট্যাগ required="".ব্রাউজার ব্যবহারকারী একটি বিকল্প নির্বাচন ছাড়া ফর্ম জমা দিতে অনুমতি দেয় না।

<form action="" method="POST">
    <select name="in-op" required="">
        <option disabled="" selected="">Select Option</option>
        <option>Option 1</option>
        <option>Option 2</option>
        <option>Option 3</option>
    </select>
    <input type="submit" value="Submit">
</form>

এটি কোনও বিকল্প নির্বাচন না করা অবধি পুরো নির্বাচিত উপাদানটি ধূসর করে তোলে যার ফলে সম্ভাব্য অনাকাঙ্ক্ষিত আচরণ হতে পারে।
দুষ্টচাইল

1

ইন কৌণিক আমরা স্থানধারক হিসেবে একটি বিকল্প যোগ করতে পারেন আড়াল করা যায় বিকল্প ড্রপডাউন। এমনকি আমরা একটি কাস্টম ড্রপডাউন আইকনটিকে পটভূমি হিসাবে যুক্ত করতে পারি যা ব্রাউজারের ড্রপডাউন আইকনটি প্রতিস্থাপন করে

কৌতুক হয় স্থানধারক সক্ষম CSS শুধুমাত্র যখন মান নির্বাচন না করা

/ ** আমার উপাদান টেম্পলেট * /

 <div class="dropdown">
      <select [ngClass]="{'placeholder': !myForm.value.myField}"
 class="form-control" formControlName="myField">
        <option value="" hidden >Select a Gender</option>
        <option value="Male">Male</option>
        <option value="Female">Female</option>
      </select>
    </div>

/ ** আমার উপাদান.এসটিএস * /

constructor(fb: FormBuilder) {
  this.myForm = this.fb.build({
    myField: ''
  });
}

/**global.scss*/

.dropdown {
  width: 100%;
  height: 30px;
  overflow: hidden;
  background: no-repeat white;
  background-image:url('angle-arrow-down.svg');
  background-position: center right;
  select {
    background: transparent;
    padding: 3px;
    font-size: 1.2em;
    height: 30px;
    width: 100%;
    overflow: hidden;

    /*For moz*/
    -moz-appearance: none;
    /* IE10 */
    &::-ms-expand {
      display: none;
    }
    /*For chrome*/
    -webkit-appearance:none;
    &.placeholder {
      opacity: 0.7;
      color: theme-color('mutedColor');
    }
    option {
      color: black;
    }
  }
}

1

কৌণিক 2 এর সমাধান

নির্বাচনের উপরে একটি লেবেল তৈরি করুন

<label class="hidden-label" for="IsActive"
    *ngIf="filterIsActive == undefined">Placeholder text</label>
<select class="form-control form-control-sm" type="text" name="filterIsActive"
    [(ngModel)]="filterIsActive" id="IsActive">
    <option value="true">true</option>
    <option value="false">false</option>
</select>

এবং এটি শীর্ষে রাখার জন্য সিএসএস প্রয়োগ করুন

.hidden-label {
    position: absolute;
    margin-top: .34rem;
    margin-left: .56rem;
    font-style: italic;
    pointer-events: none;
}

pointer-events: none আপনি যখন লেবেলে ক্লিক করেন তখন আপনি নির্বাচনটি প্রদর্শন করতে পারবেন যা আপনি যখন কোনও বিকল্প নির্বাচন করেন তখন লুকানো থাকে।


1

আমার অবদান এখানে। হামল + কফিস্ক্রিপ্ট + এসসিএসএস

Haml

=f.collection_select :country_id, [us] + Country.all, :id, :name, {prompt: t('user.country')}, class: 'form-control'

CoffeeScript

  $('select').on 'change', ->
    if $(this).val()
      $(this).css('color', 'black')
    else
      $(this).css('color', 'gray')
  $('select').change()

SCSS

select option {
  color: black;
}

কেবলমাত্র সার্ভারের কোড পরিবর্তন করে এবং কেবলমাত্র সম্পত্তির বর্তমান মানের উপর নির্ভর করে ক্লাস শৈলীগুলি সেট করে কেবল সিএসএস ব্যবহার করা সম্ভব তবে এই উপায়টি সহজ এবং পরিষ্কার পরিচ্ছন্ন বলে মনে হচ্ছে।

$('select').on('change', function() {
  if ($(this).val()) {
    return $(this).css('color', 'black');
  } else {
    return $(this).css('color', 'gray');
  }
});

$('select').change();
    select option {
      color: black;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="form-control" name="user[country_id]" id="user_country_id">
  <option value="">Country</option>
                      <option value="231">United States</option>
                      <option value="1">Andorra</option>
                      <option value="2">Afghanistan</option>
                      <option value="248">Zimbabwe</option></select>

select option:first-childস্থানধারকটি খোলার সময় ধূসর রাখতে আপনি আরও সিএসএস ( ) যুক্ত করতে পারেন , তবে আমি সে সম্পর্কে পাত্তা দিই নি।


1

পরিবর্তনের জন্য এটি চেষ্টা করুন:

$("select").css("color", "#757575");
$(document).on("change", "select", function(){
    if ($(this).val() != "") {
        $(this).css("color", "");
    } 
    else {
        $(this).css("color", "#757575");
    }
});

1

খাঁটি জাভাস্ক্রিপ্টের মাধ্যমে এটি কীভাবে অর্জন করা যায় তা এখানে একটি কার্যকারী উদাহরণ যা প্রথম ক্লিকের পরে বিকল্পগুলির রঙকে পরিচালনা করে:

<!DOCTYPE html>
<html>
  <head>
    <style>
      #myselect {
        color: gray;
      }
    </style>
  </head>

  <body>
    <select id="myselect">
      <option disabled selected>Choose Item
      </option>

      <option>Item 1
      </option>

      <option>Item 2
      </option>

      <option>Item 3
      </option>
    </select>

    <script>
      // Add event listener to change color in the first click
      document.getElementById("myselect").addEventListener("click", setColor)
      function setColor()
      {
        var combo = document.getElementById("myselect");
        combo.style.color = 'red';
        // Remove Event Listener after the color is changed at the first click
        combo.removeEventListener("click", setColor);
      }
    </script>
  </body>
</html>

0

আলবিরিওর প্রতিক্রিয়ার ভিত্তিতে , এই সংস্করণটি কোনও jQuery ব্যবহার করে না এবং সিএসএসের নির্দিষ্টতা আরও ভাল।

const triggerEvent = (el, eventName) => {
  let event = document.createEvent('HTMLEvents')
  event.initEvent(eventName, true, false)
  el.dispatchEvent(event)
}

let select = document.querySelector('.placeholder-select')
select.addEventListener('change', (e) => {
  e.target.classList[e.target.value == 0 ? 'add' : 'remove']('empty')
})
triggerEvent(select, 'change')
.placeholder-select option {
  color: #000000;
}
.placeholder-select option:first-child {
  color: #444444;
  font-style: italic;
  font-weight: bold;
}
.placeholder-select.empty {
  color: #7F7F7F;
}
<select class="placeholder-select">
  <option value="0" selected="selected">Choose...</option>
  <option value="1">Something</option>
  <option value="2">Something else</option>
  <option value="3">Another choice</option>
</select>


0

আপনি যদি এটি পড়ছেন এবং প্রতিক্রিয়া ব্যবহার করছেন তবে ডিফল্টভ্যালু ব্যবহার করুন।

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