Если вы знаете индекс, значение или текст. также, если у вас нет идентификатора для прямой ссылки.
Этот, этот и этот все полезные ответы.
Пример разметки
<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>
Селектор для получения среднего параметра-элемента по значению
$('.selDiv option[value="SEL1"]')
Для индекса:
$('.selDiv option:eq(1)')
Для известного текста:
$('.selDiv option:contains("Selection 1")')
EDIT. Как отмечалось выше, OP мог быть после изменения выбранного элемента выпадающего списка. В версии 1.6 и выше рекомендуется использовать метод prop():
$('.selDiv option:eq(1)').prop('selected', true)
В более старых версиях:
$('.selDiv option:eq(1)').attr('selected', 'selected')
EDIT2, после комментария Райана. Совпадение по "Выбор 10" может быть нежелательным. Я не нашел selector в соответствии с полным текстом, но filter работает:
$('.selDiv option')
.filter(function(i, e) { return $(e).text() == "Selection 1"})
Ни один из вышеперечисленных методов не предоставил мне такое решение, поэтому я решил, что предоставил бы то, что сработало для меня.
$('#element option[value="no"]').attr("selected", "selected");
prop
а не attr
.
.attr
является правильным. «selected» - это атрибут <option> w3.org/TR/html5/forms.html#attr-option-selected
Вы можете просто использовать метод val()
:
$('select').val('the_value');
the_value
значение ВСЕХ элементов SELECT на the_value
. .val не является функцией селектора / фильтра! Это средство доступа к свойству, и передача ему этой строки Устанавливает значение. Я попытался забрать свой голос обратно, но было слишком поздно после того, как я понял это в тестировании.
По значению, что работало для меня с jQuery 1.7, было ниже, попробуйте следующее:
$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
.change()
был необходим. У меня был пример, где я переключал миниатюры на основе SELECT. Когда я загружал пользовательскую тему, она должна была выбрать «Пользовательскую тему» из списка параметров. Вызов .prop()
работал, но без .change()
, уменьшенное изображение справа от моего выбора никогда не обновлялось.
Вы можете назвать выбор и использовать его:
$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);
Он должен выбрать нужный вариант.
$(elem).find('option[value="' + value + '"]').attr("selected", "selected");
Существует несколько способов сделать это, но самый чистый подход был потерян среди лучших ответов и нагрузок аргументов более val()
. Также некоторые методы были изменены с помощью jQuery 1.6, поэтому для этого требуется обновление.
В следующих примерах я предполагаю, что переменная $select
является объектом jQuery, указывающим на желаемый тег <select>
, например. через следующее:
var $select = $('.selDiv .opts');
Для сопоставления значений использование val()
намного проще, чем использование селектора атрибутов: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
Версия setter .val()
реализована в тегах select
, установив свойство selected
сопоставления option
с тем же value
, поэтому отлично работает во всех современных браузерах.
Если вы хотите установить выбранное состояние параметра напрямую, вы можете использовать prop
(not attr
) с параметром boolean
(а не текстовое значение selected
):
например. https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Если вы используете val()
для выбора <option>
, но val не согласован (может произойти в зависимости от источника значений), тогда выбирается "ничего", а $select.val()
возвращает null
.
Итак, для показанного примера и ради надежности вы можете использовать что-то вроде https://jsfiddle.net/1250Ldqn/:
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Если вы хотите совместить точный текст, вы можете использовать функцию 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";
Если вы хотите совместить по индексу, просто проиндексируйте дочерние элементы select, например. 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);
Во всех вышеперечисленных случаях событие изменения не срабатывает. Это по дизайну, так что вы не завершаетесь рекурсивными событиями изменения.
Чтобы сгенерировать событие изменения, если необходимо, просто добавьте вызов .change()
в объект jQuery select
. например самый простой пример - https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Существует также множество других способов поиска элементов с помощью селекторов атрибутов, таких как [value="SEL2"]
, но вы должны помнить, что селекторы атрибутов относительно медленны по сравнению со всеми этими другими параметрами.
Отвечая на мой вопрос для документации. Я уверен, что есть другие способы сделать это, но это работает, и этот код проверен.
<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>
Используя 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
Я использую это, когда знаю индекс списка.
$("#yourlist :nth(1)").prop("selected","selected").change();
Это позволяет изменить список и запустить событие изменения. "Nth (n)" подсчитывается из индекса 0
я пойду с: -
$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
Для выбора значения выбора с выбранным триггером:
$('select.opts').val('SEL1').change();
Для установки опции из области действия:
$('.selDiv option[value="SEL1"]')
.attr('selected', 'selected')
.change();
Этот код использует селектор, чтобы узнать объект выбора с условием, затем измените выбранный атрибут на attr()
.
В дальнейшем, я рекомендую добавить событие change()
после установки атрибута selected
, сделав это, код будет близок к изменению выбора пользователем.
/* This will reset your select box with "-- Please Select --" */
<script>
$(document).ready(function() {
$("#gate option[value='']").prop('selected', true);
});
</script>
Для JQuery, который выбран, если вы отправляете атрибут в функцию, и вам нужно обновить-выбрать вариант
$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
вы просто используете идентификатор поля выбора вместо #id (т.е. # select_name)
вместо параметра используйте параметр выбора
<script>
$(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
});
</script>
Спасибо за вопрос. Надеюсь, что эта часть кода будет работать для вас.
var val = $("select.opts:visible option:selected ").val();
Если вы не хотите использовать jQuery, вы можете использовать ниже код:
document.getElementById("mySelect").selectedIndex = "2";
$('select').val('the_value');
выглядит правильным решением, и если у вас есть строки таблицы данных, то:
$row.find('#component').val('All');
$("#my_select").val("the_new_value").change();
... ... так