Как я могу проверить, существует ли опция выбора в JQuery

169

Как я могу проверить, существует ли опция выбора в JQuery?

Я хочу динамически добавлять опции в select, и поэтому мне нужно проверить, существует ли опция для предотвращения дублирования.

Билли
источник

Ответы:

333

Это оценивает к истине, если это уже существует:

$("#yourSelect option[value='yourValue']").length > 0;
Тамас Чинеге
источник
5
Обновление до Jquery 1.6+, заключите yourValue в кавычки
Bob
1
Ага. Цитаты очень важны.
bobetko
2
Работает для меня в jquery 1.7.1, не заключая в кавычки yourValue
Mathias F
Как можно игнорировать case или toLowerCase в вышеупомянутом решении? Требуется ли для выпадающего списка $ .each?
Бен Сьюардс
1
если мы хотим реализовать сопоставление с учетом регистра, что мы должны сделать? использовать простую функцию $ .each?
Chaudhry
21

Еще один способ использования jQuery:

var exists = false; 
$('#yourSelect  option').each(function(){
  if (this.value == yourValue) {
    exists = true;
  }
});
Аминь Нгуен
источник
6
-1 Вы в основном делаете цикл самостоятельно, а не позволяете jQuery делать это, как все остальные ответы. Хотя это сработало бы, оно заново изобретает колесо.
Питер
14
не уверен, что это -1 достойно. это явно показывает процесс, который может быть полезен для начинающих. Конечно, не самый лучший ответ, но он правильный.
roberthuttinger
1
А некоторым нравится ручной подход, как я. Это также объединяет шаг добавления логического значения вместо получения 0 или 1, как это делает другой, и необходимости его преобразования. Я говорю, что оба подхода хороши, потому что вы должны сделать 2 шага в любом случае. Это кажется мне более видимым для процесса и менее подверженным ошибкам, например, не судя по длине пробела, как это .lengthможет сделать.
vapcguy
3
Плюс один за них, также вам не нужно беспокоиться о персонажах в вашем значении
Фабио С.
1
Этот ответ и ответ alnort29 на самом деле лучший способ проверить существующее значение, если вы не знаете, что такое «yourValue» (например, если это пользовательский ввод). Создание единственной строки просто для того, чтобы позволить «jQuery сделать это», потребовало бы, чтобы вы выполняли очистку ввода, и в итоге вы столкнулись с практиками кода, которые преследовали SQL на протяжении десятилетий. Таким образом, -1 совершенно неоправданно. В вопросе даже говорится, что они хотят вставлять значения «динамически». Не соединяйте свою строку динамически. Вы также не выбираете '1 из пользователей, где пароль = "' + строка + '" ", не так ли?
Ааа
20
if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){
  alert("option doesn't exist!");
}
Себ
источник
2
вам не хватает закрывающей скобки "option [value = <enter_value_here>]"
КБ.
17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

Преимуществом этого является автоматическое экранирование значения, что значительно упрощает работу со случайными кавычками в тексте.

alnorth29
источник
2

Не работает, вы должны сделать это:

if ( $("#your_select_id option[value='enter_value_here']").length == 0 ){
  alert("option doesn't exist!");
}
Майк
источник
1

Это поможет мне:

  var key = 'Hallo';

   if ( $("#chosen_b option[value='"+key+"']").length == 0 ){
   alert("option not exist!");

    $('#chosen_b').append("<option value='"+key+"'>"+key+"</option>");
    $('#chosen_b').val(key);
   $('#chosen_b').trigger("chosen:updated");
                         }
  });
Сулунг Нугрохо
источник
0

У меня была похожая проблема. Вместо того, чтобы каждый раз выполнять поиск по dom, хотя цикл для элемента управления select я сохранил элемент выбора jquery в переменной и сделал это:

function isValueInSelect($select, data_value){
    return $($select).children('option').map(function(index, opt){
        return opt.value;
    }).get().includes(data_value);
}
codeasaurus
источник
0

Хотя большинство других ответов работало на меня, я использовал .find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
Strabek
источник