मैं 'चयन' बॉक्स के लिए एक प्लेसहोल्डर कैसे बनाऊं?


1542

मैं टेक्स्ट इनपुट्स के लिए प्लेसहोल्डर्स का उपयोग कर रहा हूं जो अभी ठीक चल रहा है। लेकिन मैं अपने चयनकर्ताओं के लिए एक प्लेसहोल्डर का उपयोग करना चाहूंगा। बेशक मैं सिर्फ इस कोड का उपयोग कर सकता हूं:

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

लेकिन 'सलेक्ट योर ऑप्शन' लाइटग्रे की बजाय काले रंग में है। तो मेरा समाधान संभवतः सीएसएस-आधारित हो सकता है। jQuery भी ठीक है।

यह केवल ड्रॉपडाउन में विकल्प को ग्रे बनाता है (इसलिए तीर पर क्लिक करने के बाद):

option:first {
    color: #999;
}

सवाल यह है कि लोग चयन बॉक्स में प्लेसहोल्डर कैसे बनाते हैं? लेकिन इसका जवाब पहले ही दिया जा चुका है।

और चुने हुए मूल्य में इस परिणाम का उपयोग हमेशा ग्रे (यहां तक ​​कि एक वास्तविक विकल्प का चयन करने के बाद भी) किया जा रहा है:

select {
    color: #999;
}

1
बस अगर कोई इसे पढ़ता है - मैंने आधुनिक ब्राउज़र के लिए एक और सामान्य समाधान पोस्ट किया है जिसमें ब्राउज़र को मान्य किया गया है। वर्ष 2020 में आपका स्वागत है;)
जुरिक

जवाबों:


2973

एक गैर-सीएसएस - कोई जावास्क्रिप्ट / jQuery का जवाब:

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


134
फ़ायरफ़ॉक्स (10) डिफ़ॉल्ट चयन (प्लेसहोल्डर) के रूप में एक अक्षम विकल्प नहीं दिखाता है। यह डिफ़ॉल्ट रूप से अगले एक को दिखाता है, इस मामले में "दुर"।
जन्नो

53
मैं आमतौर पर विकलांग और चयनित दोनों को जोड़ता हूं। एफएफ में भी काम करने लगता है।
nilskp

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):

यह विधि निम्नलिखित ब्राउज़रों में काम करने की पुष्टि करती है:

  • Google Chrome - v.43.0.2357.132
  • मोज़िला फ़ायरफ़ॉक्स - v.39.0
  • सफारी - v.8.0.7 (प्लेसहोल्डर ड्रॉपडाउन में दिखाई दे रहा है, लेकिन यह चयन करने योग्य नहीं है)
  • Microsoft इंटरनेट एक्सप्लोरर - v.11 (प्लेसहोल्डर ड्रॉपडाउन में दिखाई देता है लेकिन चयन करने योग्य नहीं है)
  • प्रोजेक्ट स्पार्टन - v.15.10130 (प्लेसहोल्डर ड्रॉपडाउन में दिखाई दे रहा है, लेकिन यह चयन करने योग्य नहीं है)

अपडेट (अक्टूबर 2015):

मैंने style="display: none"HTML5 विशेषता के पक्ष में हटा दिया hiddenजिसमें व्यापक समर्थन है। hiddenतत्व के रूप में इसी तरह के लक्षण display: noneसफारी, इंटरनेट एक्सप्लोरर, (परियोजना स्पार्टन की जाँच की जरूरत है) जहां में optionलटकती में दिख रहा है, लेकिन यह चयन योग्य नहीं है।

अपडेट (जनवरी 2016):

जब selectतत्व requiredयह :invalidसीएसएस छद्म वर्ग का उपयोग करने की अनुमति देता है, जो आपको selectअपने "प्लेसहोल्डर" स्थिति में तत्व को स्टाइल करने की अनुमति देता है । :invalidप्लेसहोल्डर में रिक्त मान के कारण यहां काम करता है option

एक बार एक मूल्य निर्धारित हो जाने के बाद, :invalidछद्म वर्ग को गिरा दिया जाएगा। आप चाहें तो वैकल्पिक रूप से भी उपयोग कर सकते हैं :valid

अधिकांश ब्राउज़र इस छद्म वर्ग का समर्थन करते हैं। इंटरनेट एक्सप्लोरर 10 और बाद में। यह कस्टम स्टाइल selectतत्वों के साथ सबसे अच्छा काम करता है ; कुछ मामलों में यानी (मैक इन क्रोम / सफारी) आपको selectबॉक्स की डिफ़ॉल्ट उपस्थिति को बदलना होगा ताकि कुछ शैलियों का प्रदर्शन हो, background-colorऔर color। आप developer.mozilla.org पर संगतता के बारे में कुछ उदाहरण और अधिक जानकारी प्राप्त कर सकते हैं ।

क्रोम में मूल तत्व उपस्थिति मैक:

क्रोम में बॉक्स देशी मैक का चयन करें

क्रोम में परिवर्तित बॉर्डर तत्व मैक का उपयोग करना:

क्रोम में चुनिंदा बॉक्स मैक को बदल दिया


5
@jaacob मैंने जिन ब्राउज़रों का परीक्षण किया है, उनमें 'प्रदर्शन: कोई नहीं' शैली "कृपया चुनें" को उस सूची से छिपाती है, जो इसे केवल अच्छा दिखने वाला बनाती है।
विलियम इस्टेड

38
यह नोट करना महत्वपूर्ण है कि एक अक्षम विकल्प को फिर से नहीं चुना जा सकता है: यदि चयन अनिवार्य है, तो यह ठीक है - लेकिन यदि चयन वैकल्पिक नहीं है।
रॉबर्ट मार्क ब्रैम

2
एक्सप्लोरर 11 display:noneशैली की उपेक्षा करता है।
T30

1
:invalidमेरे करने से पहले Kudos @MattW को वर्कआउट करने का तरीका।
विलियम इस्टेड

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
@DanNissenbaum खेल के लिए बहुत देर हो चुकी थी, साथ ही इसे काम करने की आवश्यकता है, requiredइसलिए यदि आप चाहते हैं कि क्षेत्र वैकल्पिक हो तो इसका कोई फायदा नहीं है।
मटका

1
एक तरफ के रूप में, :requiredचयनकर्ता IE8 और नीचे में समर्थित नहीं है। :invalidचयनकर्ता IE9 में और नीचे समर्थित नहीं है। quirksmode.org/css/selectors
मैट वैगनर

4
गैर-आवश्यक चयन के लिए कोई समाधान नहीं?
2034 पर user3494047

1
@ user3494047 इस दृष्टिकोण के साथ नहीं - requiredशर्त यह है कि :invalidप्लेसहोल्डर चुने जाने पर ब्राउज़र छद्म वर्ग को लागू करने का कारण बनता है। [value=""]प्रतिस्थापन के रूप में काम नहीं करेगा क्योंकि उपयोगकर्ता इंटरैक्शन द्वारा जो अपडेट किया जाता है वह मूल्य संपत्ति है लेकिन सीएसएस सिंटैक्स एक (गैर-मौजूद) विशेषता को संदर्भित करता है ।
मैट डब्ल्यूडब्ल्यू

105

कुछ इस तरह:

HTML:

<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; }

जावास्क्रिप्ट:

$("#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

इसने मुझे सही रास्ते पर डाल दिया ... हालाँकि मैंने मूल्य = "" (उद्धरण चिह्नों के बीच कुछ भी नहीं) को जमा किया था, ताकि जब सबमिट बटन पर क्लिक किया गया, तब भी यह पहले विकल्प को मान्य करने में विफल रहा और एक ब्राउज़र पॉपअप आपको सूचित करता दिखाई देगा। एक विकल्प का चयन करने के लिए ... धन्यवाद @Albireo
क्रेग वेन

आपने स्पष्ट रूप से परिवर्तन फ़ंक्शन को क्यों बुलाया।
8

@ क्योंकि मैं सीएसएस वर्ग को चुनिंदा बदलाव हैंडलर में सेट करता हूं, इसलिए यदि आप नियंत्रण बनाए जाने की स्थिति में मैन्युअल रूप से घटना को नहीं बढ़ाते हैं तो शैली लागू नहीं होती है (यह केवल तब लागू किया जाएगा जब उपयोगकर्ता मैन्युअल रूप से मूल्य बदलता है)।
अल्बेरो

यह JQeury 3.4.1 पर काम नहीं कर रहा है
geobudex

45

मैंने optionनीचे एक तरह से एक छिपी विशेषता जोड़ी । यह मेरे लिए ठीक काम कर रहा है।

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


2
सिर्फ रिकॉर्ड के लिए, यह मेरे लिए काम नहीं करता (Chrome on Win10)।
क्रिस राए

लेकिन आप इसे परेशान नहीं कर सकते। यदि आप अपना मन बदलते हैं तो आप एक का चयन करते हैं, लेकिन यदि आप अपना मन बदल लेते हैं, तो आप इसे रीसेट नहीं कर सकते।
परिश्रमी

हाँ! लेकिन फॉर्म के अंदर वैसे भी उपयोगकर्ता को उस विकल्प में से किसी एक का चयन करना होता है। यदि इसकी एक आवश्यक फ़ील्ड नहीं छिपी विशेषता को हटा दें।
अजितकुमार S

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

मुझे भी यही समस्या थी और खोजते समय मैं इस प्रश्न के उत्तर में आया था, और मेरे लिए एक अच्छा समाधान मिलने के बाद, मैं इसे आप लोगों के साथ साझा करना चाहूंगा, यदि कोई व्यक्ति इससे लाभान्वित हो सकता है।

यह रहा:

HTML:

<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;
}

जावास्क्रिप्ट:

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

ग्राहक द्वारा पहला चयन करने के बाद, ग्रे रंग की कोई आवश्यकता नहीं है, इसलिए जावास्क्रिप्ट कोड कक्षा को हटा देता है place_holder

इंटरनेट एक्सप्लोरर ब्राउज़र के लिए वर्कअराउंड के रूप में @ user1096901 के लिए धन्यवाद, यदि 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
Eridanis

यह एक अच्छा बिंदु है, जिस स्थिति में आप ड्रॉपडाउन की लंबाई को स्कैन कर सकते हैं, यदि यह शून्य है, तो छिपी हुई विशेषता को हटा दें
याकूब श्नाइडर

यह MacOS पर Google Chrome 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मान्य भी है।
एलक्विमिस्टा

2
मैं इसकी अनुशंसा करता हूं क्योंकि यह सूची में प्लेसहोल्डर पाठ को कम से कम क्रोम में नहीं दिखाता है।
जोएरेड

ध्यान दें कि स्टाइल बिना काम नहीं करता हैrequired
akmalhakimi1991

18

यहां मैंने डेविड के उत्तर (स्वीकृत उत्तर) को संशोधित किया है । अपने जवाब पर, उन्होंने optionटैग पर अक्षम और चयनित विशेषता डाल दी , लेकिन जब हम छिपे हुए टैग भी डालते हैं तो यह बहुत बेहतर लगेगा।

optionटैग पर एक अतिरिक्त छिपी विशेषता जोड़कर , यह "ड्यूर" विकल्प के चयन के बाद "अपने विकल्प का चयन करें" विकल्प को फिर से चुनने से रोक देगा।

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


अपडेट के लिए धन्यवाद, लेकिन जवाब अभी भी नहीं समझाता है कि यह अलग क्यों दिखता है। उदाहरण के लिए, यह उत्तर "ड्यूर" विकल्प के चयन के बाद "अपने विकल्प का चयन करें" विकल्प को फिर से चुनने से रोकता है। कौन सी विशेषता इस व्यवहार का कारण बनती है?
18'18

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। लेकिन उस जवाब के लिए किसी भी तरह से धन्यवाद, यह मेरे लिए काम किया।
dcg

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 में काम नहीं लगता है
geobudex

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और उसके साथ किया जाना वास्तव में सरल होगा, लेकिन जब तक आपको इस कार्य को प्रदान करने वाली अद्भुत कार्यक्षमता की आवश्यकता नहीं होती है, जो कि मैं इस परियोजना के लिए नहीं करता हूं, तो मेरे बंडल में कोई और किलोबाइट जोड़ने की आवश्यकता नहीं है। ध्यान दें, 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

मैं चाहता था कि HTML के इस टुकड़े के लिए चयनित होने तक ग्रे ग्रे होना चाहिए:

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

मैंने ये सीएसएस परिभाषाएँ जोड़ी हैं:

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

यह Chrome / Safari में अपेक्षित रूप से काम करता है और शायद अन्य ब्राउज़रों में भी, लेकिन मैंने जाँच नहीं की है।


3

यहां एक सीएसएस समाधान है जो खूबसूरती से काम करता है। सामग्री को (और कंटेनर के सापेक्ष बिल्कुल तैनात) जोड़ा गया तत्व युक्त तत्व के माध्यम से (के माध्यम से: छद्म वर्ग के बाद )।

यह अपने पाठ को प्लेसहोल्डर विशेषता से प्राप्त करता है जिसे मैंने परिभाषित किया था जहां मैंने निर्देश ( attr (प्लेसहोल्डर) ) का उपयोग किया था। एक अन्य प्रमुख कारक सूचक-घटनाएँ हैं: कोई नहीं - यह प्लेसहोल्डर पाठ पर क्लिकों को चयन से गुजरने की अनुमति देता है। यदि उपयोगकर्ता पाठ पर क्लिक करता है तो अन्यथा यह नीचे नहीं गिरेगा।

मैं अपने चयनित निर्देशन में .empty वर्ग को खुद से जोड़ता हूं, लेकिन आम तौर पर मुझे पता चलता है कि कोणीय मेरे लिए जोड़ता है / हटाता है। मेरे लिए खाली है (मुझे लगता है क्योंकि मैं अपने कोड नमूने में कोणीय के संस्करण 1.2 को इंजेक्ट कर रहा हूं)।

(नमूना यह भी प्रदर्शित करता है कि अपने स्वयं के कस्टम इनपुट बनाने के लिए AngularJS में HTML तत्वों को कैसे लपेटें)

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

मैं HTML / CSS-only समाधानों के साथ संतुष्ट नहीं हूं, इसलिए मैंने selectजावास्क्रिप्ट का उपयोग करके एक कस्टम बनाने का निर्णय लिया है ।

यह कुछ ऐसा है जो मैंने पिछले 30 मिनट में लिखा है, इस प्रकार इसमें और सुधार किया जा सकता है।

आपको बस कुछ डेटा विशेषताओं के साथ एक सरल सूची बनाना है। कोड स्वचालित रूप से सूची को एक चयन योग्य ड्रॉपडाउन में बदल देता है। यह 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दूर किया जा सकता है (जैसे, विकल्पों की स्टाइलिंग की अक्षमता)।


अपडेट : मैंने इसे (ऊपर / नीचे / दर्ज कुंजियों का उपयोग करके चयन) में सुधार किया है, आउटपुट को थोड़ा सा tidied किया है, और इसे एक ऑब्जेक्ट में बदल दिया है। मौजूदा उत्पादन:

<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]);

आगे की परीक्षा के लिए: JSFiddle , GitHub (बदला हुआ नाम)।


अपडेट: मैंने इसे फिर से लिखा है। किसी सूची का उपयोग करने के बजाय, हम केवल एक चयन का उपयोग कर सकते हैं। इस तरह यह जावास्क्रिप्ट के बिना भी काम करेगा (यदि यह अक्षम है)।

इनपुट:

<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>

JSFiddle , GitHub


2

आपको फॉर्म सत्यापन की आवश्यकता है और आधुनिक ब्राउज़र इसे खरोंच से पेश करते हैं।

इसलिए आपको यह ध्यान रखने की आवश्यकता नहीं है कि उपयोगकर्ता फ़ील्ड का चयन नहीं कर सकता है। क्योंकि जब वह ऐसा कर रहा है, तो ब्राउज़र सत्यापन उसे बताएगा, कि यह एक गलत चयन है।

सत्यापन फ़ंक्शन checkValidity में बनाया गया ब्राउज़र ()

बूटस्ट्रैप का एक अच्छा उदाहरण भी है।

एचटीएमएल

<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

में कोणीय हम प्लेसहोल्डर कि के रूप में एक विकल्प जोड़ सकते हैं छिपा हो सकता है विकल्प लटकती में। हम भी एक जोड़ सकते हैं कस्टम ड्रॉपडाउन आइकन कि पृष्ठभूमि के रूप में जगह ब्राउज़र लटकती आइकन।

चाल है प्लेसहोल्डर सक्षम सीएसएस केवल जब मूल्य चयनित नहीं है

/ ** मेरा घटक टेम्पलेट * /

 <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 + CoffeeScript + SCSS

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()

एससीएसएस

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जब आप खोलते हैं तो प्लेसहोल्डर को ग्रे रखने के लिए आप अधिक CSS ( ) जोड़ सकते हैं , लेकिन मुझे इस बात की परवाह नहीं थी।


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 का उपयोग नहीं करता है और CSS विशिष्टता बेहतर है।

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

यदि आप इसे पढ़ रहे हैं और प्रतिक्रिया का उपयोग कर रहे हैं, तो defaultValue का उपयोग करें।

<option defaultValue>Select a country here</option>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.