Як я можу перевірити, чи існує вже опція у select від JQuery


169

Як я можу перевірити, чи існує вже опція у select від JQuery?

Я хочу динамічно додавати параметри в select, і тому мені потрібно перевірити, чи існує опція, щоб запобігти дублюванню.

Відповіді:


333

Це оцінюється як вірно, якщо воно вже існує:

$("#yourSelect option[value='yourValue']").length > 0;

5
Оновлення до Jquery 1.6 +, додайте свою ціну до лапок
Боб

1
Так. Котирування дуже важливі.
бобетко

2
Працює для мене у jquery 1.7.1, не вкладаючи свою кошторисну пропозицію
Mathias F

Як можна ігнорувати case або toLowerCase у вищезазначеному рішенні? Для цього знадобиться $ .each для випадаючого списку?
Ben Sewards

1
якщо ми хочемо реалізувати відповідність регістру, то що нам робити? використовувати просту функцію $ .each?
Chaudhry Waqas

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
Плюс до цього, також вам не потрібно хвилюватися за персонажів у вашій Валерії
Fabio C.

1
Ця відповідь та alnort29 - це найкращий спосіб перевірити наявність існуючого значення, якщо ви не знаєте, що таке "yourValue" (наприклад, якщо це введення користувача). Побудова єдиного рядка просто для того, щоб "jQuery зробив це" зажадала б зробити санітарію введення, і ви закінчите практикування коду, що переслідує SQL протягом десятиліть. Так що -1 абсолютно невиправдано. У питанні навіть зазначено, що вони хочуть вставляти значення "динамічно". Не закріплюйте рядок разом динамічно. Ви також не вибираєте "1" серед користувачів, де password = "'+ string +'" ', чи не так?
Ааа

20
if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){
  alert("option doesn't exist!");
}

2
вам не вистачає дужки закриття "параметр [value = <enter_value_here>]"
КБ.

17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

Це має перевагу в автоматичному уникненні значення для вас, що робить випадкові лапки в тексті набагато простішими для вирішення.


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 кожен раз, хоча цикл для елемента управління я зберег елемент вибору jquery у змінній і зробив це:

function isValueInSelect($select, data_value){
    return $($select).children('option').map(function(index, opt){
        return opt.value;
    }).get().includes(data_value);
}

0

Хоча більшість інших відповідей працювали на мене, я використовував .find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.