Установить опцию выбора 'selected', по значению

У меня есть поле select с некоторыми параметрами. Теперь мне нужно выбрать один из этих options с помощью jQuery. Но как я могу это сделать, когда я знаю только value из option, которые должны быть выбраны?

У меня есть следующий HTML-код:

<div class="id_100">
  <select>
    <option value="val1">Val 1</option>
    <option value="val2">Val 2</option>
    <option value="val3">Val 3</option>
  </select>
</div>

Мне нужно выбрать вариант со значением val2. Как это может быть сделано?

Вот демонстрационная страница: http://jsfiddle.net/9Stxb/


person w00    schedule 12.11.2012    source источник


Ответы (24)


Есть более простой способ, который не требует, чтобы вы заходили в тег параметров:

$("div.id_100 select").val("val2");

Ознакомьтесь с этим методом jQuery.

ПРИМЕЧАНИЕ. Приведенный выше код не вызывает событие изменения. Для полной совместимости его нужно называть так:

$("div.id_100 select").val("val2").change();
person pinghsien422    schedule 07.06.2013
comment
Это может вызвать ошибки в FF (по крайней мере), возникающие в пустом поле выбора - person Jonathan; 09.07.2014
comment
плакат с вопросом начинается с: У меня есть поле выбора с некоторыми параметрами в нем ... так что оно не пустое, поэтому решение остается правильным. - person pinghsien422; 10.07.2014
comment
Я столкнулся с проблемой пустого раскрывающегося списка из-за val (), но она была решена с помощью prop () или attr (). - person Bikal Basnet; 25.12.2014
comment
Как бы вы этого достигли, если бы значение было пустым? - person Gareth Daine; 06.03.2015
comment
Что, если для выбора установлено несколько атрибутов? Я пробовал разделять значения запятыми, но ничего не вышло. - person James Cazzetta; 21.04.2015
comment
Что касается вопроса о пустых параметрах или установке значения, которого в настоящее время нет в параметрах, я бы сказал, что ваша логика должна обнаруживать и избегать этой ситуации, а не молча терпеть неудачу. - person pinghsien422; 21.06.2015
comment
@JamesCazzetta отправляет массив в val: .val(["Multiple2", "Multiple3"]). api.jquery.com/val/#val-value - person scipilot; 19.07.2015
comment
Мне пришлось вручную вызвать .val(x).change();, чтобы вызвать событие select onChange, похоже, установка val () его не запускает. - person scipilot; 19.07.2015
comment
Будьте осторожны: val () может устанавливать значения, которых нет в параметрах. - person Daniel; 14.04.2016
comment
Это попытается установить val2 как значение всего select (что не имеет никакого эффекта), но вопрос заключался в том, как выбрать элемент option, где значение равно val2 - я что-то здесь упускаю? - person BornToCode; 29.08.2016
comment
Это НЕ БУДЕТ обновлять свойство externalHTML элемента. Если вам нужно это свойство, это решение не работает. - person HoldOffHunger; 16.11.2017
comment
Совет @scipilot отличный, и я нашел много этих хакерских утилит, которые реализуют оболочки для полей выбора, чтобы предоставить им функциональность, которая в противном случае не потребовалась бы, требуя вызова .change () после .val (), чтобы работать по назначению. - person conrad10781; 18.01.2018
comment
Используя jQuery Mobile, не забудьте обновить пользовательский интерфейс, чтобы отображался ваш выбор. $ ('# выбрать'). selectmenu (). selectmenu ('обновить'); - person Olmstov; 01.02.2018
comment
Если это не работает для вас, помните, что $ (div.id_100 select) выбирает элемент ‹div class = id-100› ‹select ... /›. В целях тестирования попробуйте: $ ('select'). Val (the_value); Это только в том случае, если на вашей странице есть один элемент ‹select›. Пожалуйста, измените при необходимости. Также не забудьте убедиться, что элемент находится в DOM перед запуском скрипта. - person Exel Gamboa; 18.06.2018
comment
Я использую мобильный запрос, и мне необходимо использовать триггер (изменение) для обновления пользовательского интерфейса. Спасибо - person Kandy; 03.05.2021

Чтобы выбрать параметр со значением «val2»:

$('.id_100 option[value=val2]').attr('selected','selected');
person Kirill Ivlev    schedule 12.11.2012
comment
Это лучшее решение, если желаемое значение может быть или не быть вариантом, и вы не хотите вносить изменения, если это не вариант. Если вы используете .val() для выбора и попытаетесь выбрать значение, которого нет, он отменит выбор всего. - person Wally Altman; 19.06.2014
comment
Согласитесь - это самый элегантный вариант - понятный и по существу. Не уверен, что prop работает лучше во всех случаях (в браузерах). Но это, безусловно, делает для вас легкий поиск. - person Lee Fuller; 29.11.2015
comment
Кроме того, я использовал $("select[name=foo] option[value=bar]).attr('selected','selected');, который также хорошо работал во всех протестированных мной браузерах. - person Lee Fuller; 29.11.2015
comment
Хороший ответ, НО, я считаю его непоследовательным при работе с большими выборками, случайным образом пропуская элементы, в то время как .prop () давал постоянный результат. (В выборке было около 4000 опций, а скрипт требовал динамического выбора от 1 до 4000). - person Emil Borconi; 07.04.2016
comment
Определенно необходимо использовать хотя бы .attr('selected', true); vs prop() в Safari. Удивительно, так как я бы считал это собственностью, но, видимо, нет. - person Brendon Muir; 11.10.2016
comment
Мне нравится этот ответ, потому что он позволяет мне устанавливать настраиваемые атрибуты для параметров, в моем случае я устанавливаю не по значению, а настраиваемый атрибут. - person Sam; 23.12.2016
comment
Это сработало для меня, но поскольку мои значения были десятичными (например .05, .1, .25), мне пришлось использовать двойные кавычки вокруг них, например, $ ('. Id_100 option [value = val2]'). Attr ( 'selected', 'selected'); - person c0y0teX; 20.05.2017
comment
Мне этот ответ нравится больше, чем принятый ответ, потому что: element.outerHTML обновляется с ним, а с принятым ответом - нет. - person HoldOffHunger; 16.11.2017
comment
Как указывает @LeeFuller, .attr('selected', 'selected') лучше поддерживается, чем .prop. Chrome проигнорировал предложение @AWolff. - person Alex; 20.02.2018
comment
Стоит отметить, что это не сработает, если раскрывающийся список выбора был скрыт, поэтому в моем случае я использую плагин select boxit, но пытаюсь вызвать изменение поля выбора, поэтому исходный код с обработчиком onchange для раскрывающегося списка все равно будет работать. Просто нужно обновить код для нового элемента, который является элементом selectboxit. - person chris c; 30.08.2018
comment
Если вышеуказанный метод не работает для вас, используйте change(), например $("div.id_100 select").val("val2")->change(); - person Espresso; 22.03.2021

После выбора значения используйте событие change(). Из документов:

Если поле теряет фокус без изменения содержимого, событие не запускается. Чтобы инициировать событие вручную, примените .change() без аргументов:

$("#select_id").val("val2").change();

Дополнительная информация находится на странице .change ().

person jitendrapurohit    schedule 21.10.2015
comment
Это заслуживает гораздо большего количества голосов и принадлежит к числу лучших. Это правильный способ, без возни с prop, attr и т. Д. И должным образом прогнозирует все события. - person Polygnome; 10.03.2017
comment
Да, все события распространяются правильно. В моем тестировании attr работал в первый раз, затем все оставалось выбранным. Я использовал опору, которая изменила все правильно, но не распространяла такие события, как (показать / скрыть) другие поля. Этот ответ работал во всех случаях и должен считаться правильным. - person iLLin; 26.06.2017
comment
Получил ошибку !!! Это изменение вызывает все другие события изменения раскрывающихся списков ... Как избежать вызова других событий изменения раскрывающихся списков - person Daniel A Sathish Kumar; 25.07.2017
comment
Если у вас уже есть слушатель, который должен изменить, это вызовет бесконечный цикл. - person qwertzman; 09.10.2017
comment
Используя jQuery Mobile, вы можете обновить пользовательский интерфейс, не вызывая событие изменения, вызвав обновление. $ ('# выбрать'). selectmenu (). selectmenu ('обновить'); - person Olmstov; 01.02.2018
comment
Некоторое время я пытался изменить значение моего глупого раскрывающегося списка, но это решение было единственным, которое сработало! Спасибо дружище! - person AxleWack; 02.10.2019
comment
Спасибо. Я много искал, прежде чем нашел это предложение, и это было единственное, что сработало. Не уверен, почему он не наверху. - person Rob Santoro; 02.06.2020
comment
Это единственное, что сработало в моем сценарии: я использовал jQuery в приложении Asp.Net Core; Мне нужно было принудительно изменить функцию onload в моем частичном классе, чтобы запустить обработчик изменений в основном классе. Согласен - этот ответ должен быть намного выше! - person paulsm4; 11.06.2020
comment
палочка-выручалочка на 2020 год! - person kamp; 27.11.2020

Сначала отмените выбор всех и отфильтруйте выбираемые параметры:

$('.id_100 option')
     .removeAttr('selected')
     .filter('[value=val1]')
         .attr('selected', true)
person silly    schedule 12.11.2012
comment
Значение выбранного атрибута может быть пустой строкой или selected. Вы имели в виду .prop()? - person rink.attendant.6; 17.09.2013
comment
Хороший ответ. Принятый ответ заканчивается пустым выбором, когда значение не существует в параметрах. - person Rauli Rajande; 31.01.2015
comment
В ТОП, лучший здесь. Для будущего использования, я думаю, нам следует использовать prop вместо attr. - person Daniel; 14.04.2016
comment
Мне очень нравится это решение. Мне интересно, было бы лучше с точки зрения производительности, если бы селектор был изменен на опцию .id_100 › - person Hill; 20.04.2017

Для меня следующее сработало

$("div.id_100").val("val2").change();
person Taran    schedule 27.07.2016

Я думаю, что самый простой способ - установить val (), но вы можете проверить следующее. См. Как обрабатывать select и option в jQuery? для получения дополнительных сведений о параметрах.

$('div.id_100  option[value="val2"]').prop("selected", true);

$('id_100').val('val2');

Не оптимизировано, но в некоторых случаях может быть полезна следующая логика.

$('.id_100 option').each(function() {
    if($(this).val() == 'val2') {
        $(this).prop("selected", true);
    }
});
person Dipu    schedule 07.09.2013
comment
Я предпочитаю этот метод, а не установку val () напрямую. Я тоже люблю устанавливать атрибут - помогает с отладкой. $ (this) .attr (выбрано, выбрано) - person Craig Jacobs; 02.01.2018

Лучший способ такой:

$(`#YourSelect option[value='${YourValue}']`).prop('selected', true);
person Daniel Carpio Contreras    schedule 11.03.2019
comment
В Chrome настройка $('<select>').val('asdf') не обновляла выбор, чтобы показать текущий выбранный параметр. Этот ответ устранил эту проблему. - person Joshua Burns; 13.12.2019
comment
Хотя это тоже будет работать, но $ ('‹select›) .val (' asdf ') хорошо работает в chrome 79.0.3945.88 - person QMaster; 22.12.2019

простой ответ: в html

<select name="ukuran" id="idUkuran">
    <option value="1000">pilih ukuran</option>
    <option value="11">M</option>
    <option value="12">L</option>
    <option value="13">XL</option>
</select>

в jquery вызовите функцию ниже кнопкой или как-то еще

$('#idUkuran').val(11).change();

это просто и на 100% работает, потому что это взято из моей работы ... :) надеюсь, что это поможет ..

person Mang Jojot    schedule 09.12.2017
comment
Ваше значение по умолчанию - 1000? Почему нет - person Sascha; 06.02.2018
comment
это необязательно, вы можете изменить по своему усмотрению .. :) - person Mang Jojot; 09.02.2018

Вы можете выбрать любой атрибут и его значение с помощью селектора атрибутов [attributename=optionalvalue], поэтому в вашем случае вы можете выбрать параметр и установить выбранный атрибут.

$("div.id_100 > select > option[value=" + value + "]").prop("selected",true);

Где value - значение, которое вы хотите выбрать.

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

$("div.id_100 option:selected").prop("selected",false);
$("div.id_100 option[value=" + value + "]")
        .prop("selected",true);
person Rune FS    schedule 12.11.2012

Нет причин задумываться об этом, все, что вы делаете, - это доступ и установка свойства. Вот и все.

Итак, базовый принцип работы: Если бы вы делали это на прямом JavaScript, вы бы сделали это:

window.document.getElementById('my_stuff').selectedIndex = 4;

Но вы делаете это не с помощью обычного JavaScript, а с помощью jQuery. А в jQuery вы хотите использовать функцию .prop () для установки свойства, поэтому вы должны сделать это следующим образом:

$("#my_stuff").prop('selectedIndex', 4);

В любом случае, просто убедитесь, что ваш идентификатор уникален. В противном случае вы будете биться головой о стену, недоумевая, почему это не сработало.

person Yitzhak    schedule 03.03.2018

Самый простой способ сделать это:

HTML

<select name="dept">
   <option value="">Which department does this doctor belong to?</option>
   <option value="1">Orthopaedics</option>
   <option value="2">Pathology</option>
   <option value="3">ENT</option>
</select>

jQuery

$('select[name="dept"]').val('3');

Выход: это активирует ENT.

person Pran    schedule 02.12.2015

Вы можете добиться этого с помощью разных методов:
(помните, что если элемент должен быть управляемым, лучше дать ему идентификатор или класс, а не иметь его родительский элемент идентификатором или классом).
Здесь, поскольку div имеет класс для выбора внутри него, код будет:

$("div.id_100 select").val("val2");

or

$('div.id_100  option[value="val2"]').prop("selected", true);

Если классу было бы дано право выбирать самого себя, код будет таким:

$(".id_100").val("val2");

or

$('.id_100 option[value=val2]').attr('selected','selected');

or

$('.id_100 option')
    .removeAttr('selected')
    .filter('[value=val1]')
    .attr('selected', true);

Для динамической передачи значения используется следующий код:
valu = val2;

$("div.id_100 select").val(valu);
$("div.id_100 > select > option[value=" + valu + "]").prop("selected",true);

Если элемент добавляется через ajax, вам нужно будет указать 'id' вашему элементу и использовать
window.document.getElementById иначе вам нужно будет присвоить 'class' вашему элементу и использовать
window.document.getElementById

Вы также можете выбрать значение элемента select по его порядковому номеру.
Если вы указали идентификатор выбранному элементу, код будет:

window.document.getElementById('select_element').selectedIndex = 4;

Помните, что когда вы изменяете значение select, как указано выше, метод изменения не вызывается.
то есть, если вы написали код для выполнения некоторых действий при изменении select, вышеуказанные методы изменят значение select, но не вызовут изменение. < br> для запуска функции изменения вам нужно добавить .change () в конце. поэтому код будет:

$("#select_id").val("val2").change();
person sifr_dot_in    schedule 17.08.2020

Лучше использовать change() после установки значения select.

$("div.id_100 select").val("val2").change();

При этом код приблизится к изменению выбора пользователем, объяснение включено в JS Fiddle:

JS Fiddle

person Nick Tsai    schedule 06.06.2017
comment
Почему это? Не могли бы вы немного объяснить? - person 71GA; 05.08.2017
comment
JS Fiddle. С помощью метода change () код приблизится к изменению выбора пользователем, в то время как необходимо обработать прослушиватели при изменении. - person Nick Tsai; 05.08.2017

$('#graphtype option[value=""]').prop("selected", true);

Это хорошо работает, где #graphtype - это идентификатор тега select.

пример выберите тег:

 <select name="site" id="site" class="form-control" onchange="getgraph1(this.options[this.selectedIndex].value);">
    <option value="" selected>Site</option> 
    <option value="sitea">SiteA</option>
    <option value="siteb">SiteB</option>
  </select>
person LOKENDRA    schedule 16.01.2018

Использовать:

$("div.id_100 > select > option[value=" + value + "]").attr("selected",true);

У меня это работает. Я использую этот код для анализа значения в форме обновления fancybox, и мой полный исходный код из app.js:

jQuery(".fancybox-btn-upd").click(function(){
    var ebid = jQuery(this).val();

    jQuery.ajax({
        type: "POST",
        url: js_base_url+"manajemen_cms/get_ebook_data",
        data: {ebookid:ebid},
        success: function(transport){
            var re = jQuery.parseJSON(transport);
            jQuery("#upd-kategori option[value="+re['kategori']+"]").attr('selected',true);
            document.getElementById("upd-nama").setAttribute('value',re['judul']);
            document.getElementById("upd-penerbit").setAttribute('value',re['penerbit']);
            document.getElementById("upd-tahun").setAttribute('value',re['terbit']);
            document.getElementById("upd-halaman").setAttribute('value',re['halaman']);
            document.getElementById("upd-bahasa").setAttribute('value',re['bahasa']);

            var content = jQuery("#fancybox-form-upd").html();
            jQuery.fancybox({
                type: 'ajax',
                prevEffect: 'none',
                nextEffect: 'none',
                closeBtn: true,
                content: content,
                helpers: {
                    title: {
                        type: 'inside'
                    }
                }
            });
        }
    });
});

И мой PHP-код:

function get_ebook_data()
{
    $ebkid = $this->input->post('ebookid');
    $rs = $this->mod_manajemen->get_ebook_detail($ebkid);
    $hasil['id'] = $ebkid;
    foreach ($rs as $row) {
        $hasil['judul'] = $row->ebook_judul;
        $hasil['kategori'] = $row->ebook_cat_id;
        $hasil['penerbit'] = $row->ebook_penerbit;
        $hasil['terbit'] = $row->ebook_terbit;
        $hasil['halaman'] = $row->ebook_halaman;
        $hasil['bahasa'] = $row->ebook_bahasa;
        $hasil['format'] = $row->ebook_format;
    }
    $this->output->set_output(json_encode($hasil));
}
person Adityo    schedule 16.03.2014

.attr () иногда не работает в более старых версиях jQuery, но вы можете использовать .prop ():

$('select#ddlCountry option').each(function () {
    if ($(this).text().toLowerCase() == co.toLowerCase()) {
        $(this).prop('selected','selected');
        return;
    }
});
person Shujaath Khan    schedule 08.09.2016

Это точно работает для Select Control:

$('select#ddlCountry option').each(function () {
if ($(this).text().toLowerCase() == co.toLowerCase()) {
    this.selected = true;
    return;
} });
person Shujaath Khan    schedule 26.11.2015

меня устраивает

$("#id_100").val("val2");
person user9972736    schedule 06.04.2020

Попробуй это. Простой, но эффективный javaScript + jQuery смертельная комбинация.

SelectComponent:

<select id="YourSelectComponentID">
            <option value="0">Apple</option>
            <option value="2">Banana</option>
            <option value="3">Cat</option>
            <option value="4">Dolphin</option>
</select>

Выбор:

document.getElementById("YourSelectComponentID").value = 4;

Теперь ваш вариант 4 будет выбран. Вы можете сделать это, чтобы выбрать значения при запуске по умолчанию.

$(function(){
   document.getElementById("YourSelectComponentID").value = 4;
});

или создайте простую функцию, поместите в нее строку и вызовите функцию на anyEvent, чтобы выбрать параметр

Смесь jQuery + javaScript творит чудеса ....

person Majid Ali Khan    schedule 20.11.2017

Это старый пост, но вот одна простая функция, которая действует как плагин jQuery.

    $.fn.selectOption = function(val){
        this.val(val)
        .find('option')
        .removeAttr('selected')
        .parent()
        .find('option[value="'+ val +'"]')
        .attr('selected', 'selected')
        .parent()
        .trigger('change');

        return this;
    };

Вы просто можете сделать что-то вроде этого:

$('.id_100').selectOption('val2');

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

В основном симуляция действий человека.

person Ivijan Stefan Stipić    schedule 16.01.2018

Здесь есть много решений для изменения выбранного значения, но ни одно из них не сработало для меня, так как моя задача немного отличалась от OP. Мне нужно отфильтровать другое раскрывающееся меню выбора на основе этого значения.

Большинство людей использовали $("div.id_100").val("val2").change();, чтобы заставить его работать на них. Мне пришлось немного изменить это до $("div#idOfDiv select").val("val2").trigger("change").

Этого тоже было недостаточно, я также должен был убедиться, что я дождался загрузки документа. Мой полный код выглядит так:

$(document).ready(function() {
    $("div#idOfDiv select").val("val2").trigger("change");
});

Надеюсь, это поможет кому-то с той же проблемой, что и я!

person jAC    schedule 08.03.2021
comment
Я использую мобильный запрос, и мне необходимо использовать триггер (изменение) для обновления пользовательского интерфейса. Спасибо - person Kandy; 03.05.2021

Похоже, что существует проблема с раскрывающимися элементами управления select, которые не меняются динамически, когда элементы управления создаются динамически, а не находятся на статической HTML-странице.

В jQuery это решение сработало для меня.

$('#editAddMake').val(result.data.make_id);
$('#editAddMake').selectmenu('refresh');

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

Надеюсь это поможет.

person user2288580    schedule 04.05.2019

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

var value;

$("#selectorId > option").each(function () {
  if ("SOMECODE" === $(this).text()) {
    value = $(this).val();
  }
});

//Do work here
person wattry    schedule 14.08.2019

Мне нужно было выбрать параметр, но два параметра могли иметь одинаковое значение.
Это было чисто для визуальной (интерфейсной) разницы.
Вы можете выбрать вариант (даже если у двух есть то же значение) вот так:

let options = $('#id_100 option')
options.prop('selected', false)   // Deselect all currently selected ones
let option = $(options[0])        // Select option from the list
option.prop('selected', true)
option.parent().change()          // Find the <select> element and call the change() event.

Это отменит выбор всех выбранных в данный момент <option> элементов. Выбирает первый (с помощью options[0]) и обновляет элемент <select> с помощью события change.

person Kerwin Sneijders    schedule 20.05.2021