select ‹выбрать› элемент по значению

у меня есть

<select id="x">
    <option value="5">hi</option>
    <option value="7">hi 2</option>
</select>

Мне нужна функция javascript, которая позволяет мне выбирать и отображать <option> по умолчанию по идентификатору. Другими словами, я хочу сделать setOption(5) и <option> со значением «5», которые будут отображаться в поле со списком по умолчанию.

Это возможно?


person Rami Dabain    schedule 01.12.2010    source источник
comment
А что вы пробовали?   -  person David says reinstate Monica    schedule 01.12.2010
comment
вам не нужен даже javascript для этого. Есть ли какая-то причина, по которой вам нужно сделать это на стороне клиента?   -  person fifigyuri    schedule 01.12.2010
comment
@fifigyuri - Почему бы и нет? Я могу придумать несколько причин, по которым это может быть полезно. Кстати, если jQuery является опцией, это так же просто, как $('#x').val('5');.   -  person Kobi    schedule 01.12.2010
comment
@Kobi, очевидно, для этого могут быть причины, но если их нет, то почему бы не исключить javascript из решения? Просто из вопроса (для меня) было не так ясно, что javascript действительно так важен.   -  person fifigyuri    schedule 02.12.2010
comment
Обратитесь к этой статье: javascriptstutorial.com/blog/   -  person    schedule 25.05.2016


Ответы (6)


Если вы можете, с ES6...

function setOption(selectElement, value) {
    return [...selectElement.options].some((option, index) => {
        if (option.value == value) {
            selectElement.selectedIndex = index;
            return true;
        }
    });
}

...иначе...

function setOption(selectElement, value) {
    var options = selectElement.options;
    for (var i = 0, optionsLength = options.length; i < optionsLength; i++) {
        if (options[i].value == value) {
            selectElement.selectedIndex = i;
            return true;
        }
    }
    return false;
}

setOption(document.getElementById('my-select'), 'b');

Посмотрите!

Если он возвращает false, значит, значение не найдено :)

person alex    schedule 01.12.2010
comment
Спасибо, небольшое исправление for (var i = 0; i < options.length; i++) - person Rami Dabain; 01.12.2010
comment
@Ronan Dejhero В этом исправлении нет необходимости? - person alex; 01.12.2010
comment
@Ronan Dejhero Он будет получать доступ к свойству длины для каждой итерации :) - person alex; 01.12.2010
comment
параметрыдлина = параметры.длина; вне цикла, затем используйте optionsLength внутри цикла - person Rami Dabain; 20.07.2013
comment
Можно ли это сделать без использования i-подобных индексов? через forEach как-нибудь? - person Nakilon; 28.02.2014
comment
@Nakilon Да, но вам нужно будет использовать что-то вроде [].forEach.call(), так как параметры - это NodeList, я полагаю. - person alex; 28.02.2014

Если кто-то ищет решение jquery, используйте функцию val().

$("#select").val(valueToBeSelected);

В Javascript,

document.getElementById("select").value = valueToBeSelected; 
person Rajan Verma - Aarvy    schedule 17.01.2018

Использование Javascript:

document.getElementById('drpSelectSourceLibrary').value = 'Seven';
person Community    schedule 25.05.2016

Если вы используете jQuery (1.6 или выше)

$('#x option[value="5"]').prop('selected', true)
person Dasun    schedule 19.07.2013
comment
Когда я пытаюсь использовать $('#x option[value=5]') в js-консоли с моим значением (видимым при проверке элемента), он не находит этот параметр. Если я использую $('#x'), это так. Разумеется, все с использованием идентификатора элемента моей страницы. - person JosephK; 18.05.2016
comment
Я ответил на вопрос, заданный исходный вопрос выберите «выбрать» элемент по значению. Что вы пытаетесь сделать, это что-то другое. и спасибо за отрицательный голос за правильный ответ: D - person Dasun; 25.06.2016
comment
извините за недоразумение :) голос против и ваш комментарий приходят сразу, поэтому я сделал неправильный расчет :) - person Dasun; 28.06.2016

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

Самый простой способ для одного выбора - просто установить значение выбора:

var mySelect = document.getElementById( 'my-select-id' );
mySelect.value = 7;

Вы также можете получить выбранную опцию по значению точно так же:

console.log( mySelect.value );

То, что я искал, было лучшим способом установить значения множественного выбора (<select multiple>...</select>), но, как оказалось, вам нужно перебрать параметры и установить их в каком-то цикле for:

function setMultiSelectValues( select, values ) {
    for (var i = 0; i < select.options.length; i++) {
        var option = select.options[i];
        if ( values.includes( option.value ) ) {
            option.selected = true;
        }
    }
}

А затем используйте его как:

var mySelect = document.getElementById( 'my-select-id' );
var myValues = [ 'option-1', 'option-5' ];
setMultiSelect( mySelect , values );

Демо: https://codepen.io/rmorse/pen/QWNymdb

person rmorse    schedule 13.08.2020

Вам не нужен даже javascript для участия, используйте просто атрибут selected:

<select id="x">
  <option value="5" selected>hi</option>
  <option value="7">hi 2</option>
</select>
person fifigyuri    schedule 01.12.2010
comment
На самом деле я попросил код javascript, чтобы иметь возможность редактировать объект с выбранным атрибутом. - person Rami Dabain; 01.12.2010
comment
@ Ронан, да; но именно это и имел в виду @fifigyuri: если это не делается в ответе на действия пользователя на стороне клиента, мало причин для используйте функцию JavaScript для достижения этой цели. - person David says reinstate Monica; 01.12.2010