जांचें कि क्या मान JQuery के साथ चयनित सूची में है


112

मैं, JQuery का उपयोग कैसे कर सकता हूं, जांचें कि क्या मान ड्रॉपडाउन सूची से संबंधित है या नहीं?

जवाबों:


180

एट्रिब्यूट इक्वल सिलेक्टर का उपयोग करें

var thevalue = 'foo';
var exists = 0 != $('#select-box option[value='+thevalue+']').length;

यदि विकल्प का मान जावास्क्रिप्ट के माध्यम से सेट किया गया था, तो वह काम नहीं करेगा। इस मामले में हम निम्नलिखित कर सकते हैं:

var exists = false;
$('#select-box option').each(function(){
    if (this.value == 'bar') {
        exists = true;
        return false;
    }
});

8
स्पष्ट दूसरा दृष्टिकोण भी सुरक्षित है क्योंकि यह विकल्प के मूल्यों को अनुमति देता है, जिसमें किसी भी वर्ण को शामिल किया गया है, ]और ``। सीएसएस से बचने के बिना कच्चे पाठ से चयनकर्ता तार के निर्माण से बचें।
बॉब

8
क्यों return false?
ग्रांट बिर्चमियर

14
रिटर्न झूठी का उपयोग ब्रेक / एंड .each लूप को तोड़ने के लिए किया जाता है।
एंजेल

यदि आप इस तर्क का उपयोग करके जावास्क्रिप्ट द्वारा नए विकल्प बनाते हैं: $ ('# चयन-बॉक्स')। परिशिष्ट ($ (<<value value = "'+ value +'"> '+ text +' </ विकल्प> ')) ; (या अधिक बातूनी शैली में), पहला उदाहरण काम करेगा (आपको पुनरावृति की आवश्यकता नहीं है)।
लुकास जेलिनक

1
मुझे ऐसा मामला नहीं मिल रहा है जहां पहला कोड स्निपेट काम नहीं करता हो। मैंने एक नए विकल्प को जोड़ने और jQuery के वैल () फ़ंक्शन के साथ मौजूदा विकल्प के मूल्य को सेट करने की कोशिश की है। दोनों मामलों में, पहले कोड स्निपेट ने अभी भी काम किया। किस मामले में यह विफल होगा?
dallin

17

बस अगर आपको (या किसी और को) jQuery के बिना इसे करने में दिलचस्पी हो सकती है:

var exists = false;
for(var i = 0, opts = document.getElementById('select-box').options; i < opts.length; ++i)
   if( opts[i].value === 'bar' )
   {
      exists = true; 
      break;
   }

मैं सिर्फ ++ क्यों नहीं?
सीएसआर-नॉनटोल

1
++ मैं उपसर्ग हमेशा तेज होता है तो पोस्टफ़िक्स @ सीएसआर-नॉनटोल
आलोक

11

यहाँ एक और समान विकल्प है। मेरे मामले में, मैं एक अन्य सूची में मूल्यों की जाँच कर रहा हूँ क्योंकि मैं एक चयन सूची बनाता हूँ। मैं अपरिभाषित मूल्यों में भागता रहा जब मैं तुलना करूंगा, इसलिए मैंने अपना चेक इस तरह से सेट किया:

if ( $("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff }

मुझे नहीं पता कि यह दृष्टिकोण अधिक महंगा है।


8

क्यों नहीं एक फिल्टर का उपयोग करें?

var thevalue = 'foo';    
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length;

ढीली तुलना काम करती है क्योंकि मौजूद है> 0 सच है, मौजूद है == 0 गलत है, इसलिए आप बस उपयोग कर सकते हैं

if(exists){
    // it is in the dropdown
}

या इसे संयोजित करें:

if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){
    // found
}

या जहां प्रत्येक चुनिंदा ड्रॉपडाउन में चयन-बक्से की कक्षा होती है, इससे आपको चयन (ओं) का एक jquery ऑब्जेक्ट मिलेगा जिसमें मूल्य शामिल हैं:

var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();

यह imho सबसे सहज तरीका है।
सिमोन

4

if(!$('#select-box').find("option:contains('" + thevalue  + "')").length){
//do stuff
}


अपने समाधान में, यह नहीं है theValueलेकिन option_numberड्रॉपडाउन में। आप समाधान गलत है।
अरस्मान अहमद

1

मुझे पता है कि यह इस तरह का एक पुराना सवाल है जो बेहतर काम करता है।

if(!$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"] option[value="'+data['item'][i]['id']+'"]')[0]){
  //Doesn't exist, so it isn't a repeat value being added. Go ahead and append.
  $('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"]').append(option);
}

जैसा कि आप इस उदाहरण में देख सकते हैं, मैं अद्वितीय टैग डेटा-ड्रॉपडाउन नाम और चयनित विकल्प का मूल्य खोज रहा हूं। बेशक आपको काम करने के लिए इनकी आवश्यकता नहीं है, लेकिन मैंने उन्हें शामिल किया ताकि अन्य लोग देख सकें कि आप बहु मूल्यों की खोज कर सकते हैं, आदि।

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