Проверьте, есть ли значение в списке выбора с помощью JQuery - PullRequest
103 голосов
/ 12 февраля 2010

Как я могу, используя JQuery, проверить, принадлежит ли значение выпадающему списку или нет?

Ответы [ 6 ]

167 голосов
/ 12 февраля 2010

Использовать селектор равных атрибутов

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

Если значение параметра было установлено с помощью Javascript, это не будет работать. В этом случае мы можем сделать следующее:

var exists = false;
$('#select-box option').each(function(){
    if (this.value == 'bar') {
        exists = true;
        return false;
    }
});
15 голосов
/ 30 августа 2012

На всякий случай, если вы (или кто-то еще) могли бы заинтересоваться этим без 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;
   }
9 голосов
/ 03 апреля 2013

Вот еще один аналогичный вариант. В моем случае я проверяю значения в другом окне, когда строю список выбора. Я продолжал работать с неопределенными значениями, когда сравнивал, поэтому я установил свою проверку следующим образом:

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

Понятия не имею, дороже ли этот подход.

5 голосов
/ 30 ноября 2015

Почему бы не использовать фильтр?

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
}

Или где каждый выпадающий список имеет класс select-boxes, это даст вам объект jquery для выбора (ов), который содержит значение:

var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();
2 голосов
/ 23 сентября 2016

if(!$('#select-box').find("option:contains('" + thevalue  + "')").length){
//do stuff
}
0 голосов
/ 07 июня 2019

Я знаю, что это своего рода старый вопрос, так как этот работает лучше.

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

Как вы можете видеть в этом примере, я ищу по уникальным тегам имя выпадающего списка и значениевыбранный вариант.Конечно, они не нужны, чтобы они работали, но я включил их, чтобы другие могли видеть, что вы можете искать по нескольким значениям и т. Д.

...