Есть несколько способов сделать это, но самый чистый подход был потерян среди лучших ответов и множества аргументов по val() . Также некоторые методы изменились с jQuery 1.6, так что это требует обновления.
В следующих примерах я предполагаю, что переменная $selectявляется объектом jQuery, указывающим на нужный <select>тег, например, с помощью следующего:
var $select = $('.selDiv .opts');
Примечание 1 - используйте val () для совпадений значений:
Для сопоставления значений использовать val()намного проще, чем с помощью селектора атрибутов: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
Сеттер-версия .val()реализована на selectтегах путем установки selectedсвойства совпадения optionс тем жеvalue , поэтому прекрасно работает во всех современных браузерах.
Примечание 2 - используйте prop ('selected', true):
Если вы хотите установить выбранное состояние опции напрямую, вы можете использовать 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()к selectобъекту jQuery . например, самый первый самый простой пример - https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Есть также много других способов найти элементы с помощью селекторов атрибутов, например [value="SEL2"], но вы должны помнить, что селекторы атрибутов относительно медленны по сравнению со всеми этими другими опциями.
$("#my_select").val("the_new_value").change();... ... от так