Як ви вибираєте певний параметр в елементі SELECT в jQuery?


716

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

Це , це та це всі корисні відповіді.

Приклад розмітки

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

46
$("#my_select").val("the_new_value").change();... ... from so
dsdsdsdsd

Відповіді:


1205

Селектор, щоб отримати середній параметр-елемент за значенням, є

$('.selDiv option[value="SEL1"]')

Для індексу:

$('.selDiv option:eq(1)')

Для відомого тексту:

$('.selDiv option:contains("Selection 1")')

РЕДАКТУВАННЯ : Як зазначалося вище, ОП могло бути після зміни вибраного пункту спаду. У версії 1.6 і вище метод prop () рекомендується:

$('.selDiv option:eq(1)').prop('selected', true)

У старих версіях:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : після коментаря Райана. Матч на "Вибір 10" може виявитися небажаним. Я не знайшов селектора, який би відповідав повному тексту, але фільтр працює:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : Будьте обережні, $(e).text()оскільки він може містити новий рядок, що робить порівняння невдалим. Це відбувається, коли параметри неявно закриті (без </option>тегу):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

Якщо ви просто використовуєте e.textбудь-який додатковий пробіл, як-от трейлінг нового рядка, буде видалено, що зробить порівняння більш надійним.


8
: містить не велике значення, оскільки воно відповідатиме фрагментам тексту; проблематично, якщо будь-який із варіантів тексту є підрядком іншого текстового варіанта.
Райан

26
Це теж працює $ ('# id id [value = "0"]'). Attr ('selected', 'selected');
DevC

@Grastveit, як змінити колір першого параметра, якщо він вибраний чи ні, якщо у нього є клас скажіть myClass. Спасибі
Закер

@Кори я не розумію. Можливо, опублікуйте це в новому запитанні? Або це $ ('. SelDiv .myClass'). Css ('color', 'red')?
Граствейт

6
Я хотів би додати, якщо ви ВІДПОВІДНО використовувати prop, а не attr. Я ледь не збився, намагаючись налагодити додаток і змінивши з attr на підтримку виправленого.
користувач609926

125

Жоден із вищевказаних методів не забезпечив потрібне мені рішення, і я подумав, що я забезпечу те, що працює для мене.

$('#element option[value="no"]').attr("selected", "selected");

10
Зауважте, що в jQuery 1.6 це слід використовувати, propа не використовувати attr.
Пройшло кодування

@GoneCoding Використання .attrправильно. "вибрано" - атрибут <option> w3.org/TR/html5/forms.html#attr-option-selected
Карлос Ллонго

3
@CarlosLlongo: Це не має значення. Ця рекомендація JQuery завжди використовувати propв перевазі attr. Це економить необхідність шукати кожну властивість на w3.org, щоб перевірити, чи це лише атрибут чи реалізований із виконанням резервних дій.
Пройшов кодування

81

Ви можете просто скористатися val()методом:

$('select').val('the_value');

20
Це неправильно, оскільки ви встановлюєте значення ВСІХ ВИБРАНИХ елементів the_value. .val не функція селектора / фільтра! Це аксесуар властивості та передаючи його, що рядок НАСТРОЮЄ значення. Я спробував повернути свою нагороду назад, але пізно пізніше я реалізував це на тестуванні.
AaronLS

4
Гаряче, ти отримав 10 голосів як корисну відповідь? Val () - геттер і сетер. Якщо ви просто використовуєте val (), ви отримаєте значення. Якщо ви передасте щось на зразок val ("the_value"), ви встановите його на "the_value"
Gui

11
Будь ласка, @AaronLS та @guilhermeGeek, зверніться до документів (останній приклад). Він працює як селектор для вибору, прапорців і радіо кнопок, а також як встановлення значень для введення тексту та текстових областей.
Леандро Ардіссон

9
Ви неправильно прочитали документацію. Для прапорців, радіо і списків команда встановлює атрибут "вибраний" для цих елементів. Останній приклад показує, як передача val ("прапорець 1") викликає його вибір. Це не те саме, що "селектор" з точки зору отримання об'єктів за допомогою селектора CSS / jquery. Я перевірив ваш код, він не працює в нижньому рядку.
AaronLS

26
+1: ні, це не селектор JQuery, проте я думаю, що більшість людей, які шукають це питання, схожі на мене, і просто хочуть змінити вибраний на даний момент варіант; придумати фактичний селектор - це лише спосіб зробити це. І це, звичайно, краще, ніж відповіді, які я бачив, що ви перебираєте всі варіанти.
kdgregory

57

За значенням те, що працювало для мене з jQuery 1.7, це код нижче, спробуйте це:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();

5
Я не впевнений, що вам потрібен метод .change ().
Філіп Сенн

6
Це .change()було необхідно. У мене був приклад, коли я перемикав мініатюри на основі SELECT. Коли я завантажував власну тему, слід було вибрати "Спеціальна тема" зі списку параметрів. .prop()Виклик працював, але без .change(), мініатюрне зображення на правому мій вибір ніколи не оновлюється.
Воломій

2
.change () - найкраща порада. +1
Ja8zyjits

1
Примітка: булеве propзначення генерує той самий вихід. наприклад.prop('selected', true)
Пройшло кодування

Залежить, деякі браузери - можливо старі браузери - потребують рядок "вибрано". Я думаю, що більшість з них підтримує текстовий рядок.
mpoletto

16

Існує декілька способів зробити це, але найбільш чіткий підхід був загублений серед найкращих відповідей та безлічі аргументів val(). Також змінилися деякі методи, починаючи з jQuery 1.6, тому для цього потрібне оновлення.

Для наступних прикладів я припускаю, що змінна $selectє об'єктом jQuery, що вказує на потрібний <select>тег, наприклад, за допомогою наступного:

var $select = $('.selDiv .opts');

Примітка 1 - використовуйте val () для відповідності значень:

Для відповідності значення використання val()набагато простіше, ніж використання селектора атрибутів: https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

Версія програми set .val()реалізована на selectтегах, встановлюючи selectedвластивість збігання optionз однаковими value, тому добре працює у всіх сучасних браузерах.

Примітка 2 - використовуйте опору ("вибрано", правда):

Якщо ви хочете встановити вибраний стан параметра безпосередньо, ви можете використовувати prop(не attr) booleanпараметр (а не текстове значення selected):

наприклад https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

Примітка 3 - дозволяють невідомі значення:

Якщо ви val()вибираєте <option>, але значення val не збігається (може статися залежно від джерела значень), вибирається "нічого" і $select.val()повертається null.

Отже, для наведеного прикладу та для надійності ви можете використовувати щось подібне https://jsfiddle.net/1250Ldqn/ :

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

Примітка 4 - точна відповідність тексту:

Якщо ви хочете відповідати точним текстом, ви можете використовувати filterфункцію з. наприклад https://jsfiddle.net/yz7tu49b/2/ :

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

хоча якщо у вас є додатковий пробіл, можливо, ви захочете додати обробку до чека, як в

    return $.trim(this.text) == "some value to match";

Примітка 5 - відповідність за індексом

Якщо ви хочете співставити за індексом, просто індексуйте дітей, що вибираються, наприклад https://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

Хоча в даний час я схильний уникати прямих властивостей DOM на користь jQuery, коду, що підтверджує майбутнє, так що це також можна зробити як https://jsfiddle.net/yz7tu49b/5/ :

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Примітка 6 - використовуйте change () для запуску нового вибору

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

Щоб створити подію зміни, якщо потрібно, просто додайте виклик до об'єкта .change()jQuery select. наприклад, найпершим найпростішим прикладом стає https://jsfiddle.net/yz7tu49b/7/

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

Існує також безліч інших способів пошуку елементів за допомогою селекторів атрибутів, наприклад [value="SEL2"], але ви повинні пам’ятати, що селектори атрибутів відносно повільні порівняно з усіма цими іншими параметрами.


13

Ви можете назвати вибір і використовувати це:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

Слід вибрати потрібний варіант.


12
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");

Дякую за ваш пост, але що ця відповідь додає до розмови, яка не входить до прийнятих відповідей?
Едвард

якщо вже вибрана опція, це не вдасться, оскільки у спадному меню не може бути вибрано більше одного елемента, якщо це не багатокористувацький вибір. Вам потрібно зробити .prop ('вибрано', правда)
derekcohen

9

Відповідаючи на власне запитання щодо документації. Я впевнений, що є інші способи досягти цього, але це працює, і цей код перевірений.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>

9

Точно буде працювати спробуйте це нижче

Для звичайного вибору

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>

Для вибору 2 необхідно скористатися опцією тригера

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>

8

Використовуючи jquery-2.1.4 , я знайшов наступну відповідь, яка працює для мене:

$('#MySelectionBox').val(123).change();

Якщо у вас є значення рядка, спробуйте наступне:

$('#MySelectionBox').val("extra thing").change();

Інші приклади для мене не спрацювали, тому я додаю цю відповідь.

Оригінальну відповідь я знайшов за адресою: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu


8

Для встановлення значення вибору при вибраному запусканні:

$('select.opts').val('SEL1').change();

Для налаштування параметра з області дії:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Цей код використовує селектор, щоб з'ясувати обраний об'єкт із умовою, а потім змінити вибраний атрибут на attr().


Далі я рекомендую додати change()подію після встановлення атрибута selected, виконуючи це, код буде близьким до зміни вибору користувачем.


6

Я використовую це, коли знаю індекс списку.

$("#yourlist :nth(1)").prop("selected","selected").change();

Це дозволяє списку змінюватися та запускати подію зміни. ": Nth (n)" рахується від індексу 0


5

я піду:

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });

5

Спробуйте це

ви просто використовуєте ідентифікатор поля select замість #id (тобто. # select_name)

замість значення параметра використовуйте опцію вибору значення

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>

3

Для Jquery вибрано, якщо ви надіслали атрибут функціонуванню і вам потрібна опція оновлення-вибору

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');

3
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>

1

$('select').val('the_value');Виглядає правильне рішення , і якщо у вас є таблиці даних рядків , то:

$row.find('#component').val('All');

1

якщо ви не хочете використовувати jQuery, ви можете використовувати код нижче:

document.getElementById("mySelect").selectedIndex = "2";


0
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

або

$('#select option[value="myValue"]').prop("selected",true).trigger("change");

Відредагуйте свою відповідь, щоб код був відформатований як код. Зробіть це за допомогою панелі інструментів або просто відступаючи всі рядки кожного блоку коду на чотири пробіли.
beruic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.