Как программно установить значение элемента поля выбора с помощью JavaScript?

У меня есть следующий элемент HTML <select>:

<select id = "leaveCode" name = "leaveCode">
  <option value = "10">Annual Leave</option>
  <option value = "11">Medical Leave</option>
  <option value = "14">Long Service</option>
  <option value = "17">Leave Without Pay</option>
</select>

Как выбрать соответствующий вариант в списке с помощью функции JavaScript с номером leaveCode в качестве параметра?

см. мой ответ для сравнения производительности для разных методов

Toskan 10.08.2012 19:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
474
1
1 049 950
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Ответ принят как подходящий

Вы можете использовать эту функцию:

selectElement('leaveCode', '11')

function selectElement(id, valueToSelect) {    
    let element = document.getElementById(id);
    element.value = valueToSelect;
}

Отличный ответ, это намного проще, чем перебирать варианты. И это соответствует стандартам: dev.w3.org/html5/spec/…. Если есть несовместимости браузеров (конечно, есть :), мне было бы очень интересно узнать, что это такое. Это та вещь, вы обычно рассчитывать на ППК для, но он упорно отказывается, чтобы показать в моих поисках этой теме.

philo 22.05.2012 21:47

@Milan Возможно, проблема кроссбраузера заключается в том, что valueToSelect не существует в параметрах выбора, где браузеры могут вести себя по-разному (например, 1. не изменять текущее значение, или 2. устанавливать значение на null, или 3. принудительно устанавливать значение, чтобы оно было таким так или иначе...)? Я не пробовал себя, просто интересно.

e2-e4 14.11.2012 09:34

А как насчет множественного выбора? Это не работает в случае нескольких вариантов (по крайней мере, в Chrome 25).

Georgii Ivankin 04.03.2013 20:13

Важно отметить, что это фактически не отражает атрибут HTML value = "". <select> не поддерживает атрибут значения, и установка этого атрибута в вашем HTML абсолютно ничего не даст. value - это свойство, предоставляемое DOM API developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement

mastaBlasta 07.02.2014 23:49

Как указал @ ring0, когда valueToSelect не существует, он вставляет пустую запись в chrome. тогда как IE и firefox сохраняют последнее выбранное значение.

Karthik Bose 24.06.2015 07:55

Примечание для IE: <option> должен иметь атрибут value = 'valueToSelect'. Вы не можете использовать отображаемый текст в <option> .. </option> в качестве valueToSelect

Peter Quiring 18.05.2016 16:58

Боковое примечание - в Chrome значение скрытого поля не будет динамически изменяться, поэтому оно должно быть видимым и / или отображаемым! = None;

Patrick Sturm 30.11.2018 14:59

Если вам нужно, чтобы событие изменения запускалось, вы также должны сделать: element.dispatchEvent(new Event('change'));

Patrick James McDougle 08.02.2019 23:13

Не отвечая на вопрос, но вы также можете выбрать по индексу, где i - это индекс элемента, который вы хотите выбрать:

var formObj = document.getElementById('myForm');
formObj.leaveCode[i].selected = true;

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

for (var i = 0, len < formObj.leaveCode.length; i < len; i++) 
    if (formObj.leaveCode[i].value == 'xxx') formObj.leaveCode[i].selected = true;

Не должно быть formObj.leaveCode [i] .selected = true; быть formObj.options [i] .selected = true; ?

David Christopher Reynolds 03.10.2017 12:58

Боюсь, что сейчас я не могу это проверить, но в прошлом, я полагаю, мне приходилось давать каждому тегу option идентификатор, а затем я делал что-то вроде:

document.getElementById("optionID").select();

Если это не сработает, возможно, это приблизит вас к решению: P

HTMLOptionElement не имеет метода select() (он не определяет никаких дополнительных методов по сравнению со стандартным набором для всех элементов HTML). Однако вы можете установить для свойства selected значение true.

MrWhite 28.03.2012 15:35


function foo(value)
{
    var e = document.getElementById('leaveCode');
    if (e) e.value = value;
}

document.getElementById('leaveCode').value = '10';

При этом должен быть выбран вариант «Ежегодный отпуск».

Должно быть что-то в этом роде:

function setValue(inVal){
var dl = document.getElementById('leaveCode');
var el =0;
for (var i=0; i<dl.options.length; i++){
  if (dl.options[i].value == inVal){
    el=i;
    break;
  }
}
dl.selectedIndex = el;
}

Почему бы не добавить переменную для идентификатора элемента и не сделать ее многоразовой функцией?

function SelectElement(selectElementId, valueToSelect)
{    
    var element = document.getElementById(selectElementId);
    element.value = valueToSelect;
}

Предположим, ваша форма называется form1:

function selectValue(val)
{
  var lc = document.form1.leaveCode;
  for (i=0; i&lt;lc.length; i++)
  {
    if (lc.options[i].value == val)
    {
        lc.selectedIndex = i;
        return;
    }
  }
}

function setSelectValue (id, val) {
    document.getElementById(id).value = val;
}
setSelectValue('leaveCode', 14);

Если вы используете jQuery, вы также можете сделать это:

$('#leaveCode').val('14');

Это выберет <option> со значением 14.


С обычным Javascript этого также можно добиться с помощью двух Document методы:

  • С помощью document.querySelector вы можете выбрать элемент на основе селектора CSS:

    document.querySelector('#leaveCode').value = '14'
    
  • Используя более устоявшийся подход с document.getElementById(), который, как следует из названия функции, позволит вам выбрать элемент на основе его id:

    document.getElementById('leaveCode').value = '14'
    

Вы можете запустить приведенный ниже фрагмент кода, чтобы увидеть эти методы и функцию jQuery в действии:

const jQueryFunction = () => {
  
  $('#leaveCode').val('14'); 
  
}

const querySelectorFunction = () => {
  
  document.querySelector('#leaveCode').value = '14' 
  
}

const getElementByIdFunction = () => {
  
  document.getElementById('leaveCode').value='14' 
  
}
input {
  display:block;
  margin: 10px;
  padding: 10px
}
<select id = "leaveCode" name = "leaveCode">
  <option value = "10">Annual Leave</option>
  <option value = "11">Medical Leave</option>
  <option value = "14">Long Service</option>
  <option value = "17">Leave Without Pay</option>
</select>

<input type = "button" value = "$('#leaveCode').val('14');" onclick = "jQueryFunction()" />
<input type = "button" value = "document.querySelector('#leaveCode').value = '14'" onclick = "querySelectorFunction()" />
<input type = "button" value = "document.getElementById('leaveCode').value = '14'" onclick = "getElementByIdFunction()" />

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Это также можно использовать для множественного выбора; просто передайте в функцию val массив строк вместо одной строки. См .: stackoverflow.com/a/16583001/88409

Triynko 23.12.2015 00:38

Есть ли способ также вызвать $ ('# leaveCode'). On ('change', function (), выполнив это?

Lieuwe 24.11.2016 19:56

$ ("# leaveCode"). val ("14"). change ();

Loren 19.06.2017 22:28

Самый простой способ при необходимости:
1) Нажмите кнопку, которая определяет опцию выбора
2) Перейдите на другую страницу, где выберите вариант
. 3) Выберите значение этого параметра на другой странице.

1) ссылки на ваши кнопки (скажем, на главной странице)

<a onclick = "location.href='contact.php?option=1';" style = "cursor:pointer;">Sales</a>
<a onclick = "location.href='contact.php?option=2';" style = "cursor:pointer;">IT</a>

(где contact.php - ваша страница с параметрами выбора. Обратите внимание, что в URL-адресе страницы? option = 1 или 2)

2) поместите этот код на свою вторую страницу (мой случай contact.php)

<?
if (isset($_GET['option']) && $_GET['option'] != "") {
$pg = $_GET['option'];              
} ?>

3) делает значение параметра выбранным, в зависимости от нажатой кнопки

<select>
<option value = "Sales" <? if ($pg == '1') { echo "selected"; } ?> >Sales</option>
<option value = "IT" <? if ($pg == '2') { echo "selected"; } ?> >IT</option>
</select>

.. и так далее. Таким образом, это простой способ передать значение на другую страницу (со списком опций выбора) через GET в URL-адресе. Никаких форм, никаких идентификаторов ... всего 3 шага, и он отлично работает.

Я сравнил разные методы:

Сравнение различных способов установки значения для выбора с помощью JS или jQuery

код:

$(function() {
    var oldT = new Date().getTime();
     var element = document.getElementById('myId');
    element.value = 4;
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId option").filter(function() {
        return $(this).attr('value') == 4;
    }).attr('selected', true);
    console.error(new Date().getTime() - oldT);

    oldT = new Date().getTime();
    $("#myId").val("4");
    console.error(new Date().getTime() - oldT);
});

Вывод на выбор с ~ 4000 элементами:

  • 1 мс
  • 58 мс
  • 612 мс

В Firefox 10. Примечание. Единственная причина, по которой я проводил этот тест, заключалась в том, что jQuery очень плохо работал в нашем списке с ~ 2000 записями (у них были более длинные тексты между вариантами). У нас была задержка примерно в 2 секунды после val ()

Также обратите внимание: я устанавливаю значение в зависимости от реального значения, а не текстового значения.

Если вы используете PHP, вы можете попробовать что-то вроде этого:

$value = '11';
$first = '';
$second = '';
$third = '';
$fourth = '';

switch($value) {
            case '10' :
                $first = 'selected';
            break;
            case '11' :
                $second = 'selected';
            break;
            case '14' :
                $third = 'selected';
            break;
            case '17' :
                $fourth = 'selected';
            break;
        }

echo'
<select id = "leaveCode" name = "leaveCode">
  <option value = "10" '. $first .'>Annual Leave</option>
  <option value = "11" '. $second .'>Medical Leave</option>
  <option value = "14" '. $third .'>Long Service</option>
  <option value = "17" '. $fourth .'>Leave Without Pay</option>
</select>';

Это вопрос JavaScript, а не PHP / HTML.

Max 11.08.2020 11:17

Я пробовал указанные выше решения на основе JavaScript / jQuery, например:

$("#leaveCode").val("14");

и

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;

в приложении AngularJS, где был элемент требуется <select>.

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

Чтобы принудительно выполнить проверку AngularJS, вызовите jQuery изменять() после выбора параметра:

$("#leaveCode").val("14").change();

и

var leaveCode = document.querySelector('#leaveCode');
leaveCode[i].selected = true;
$(leaveCode).change();

Зачем использовать для этого jQuery, если вы уже можете сделать это с помощью Angular? При использовании самого Angular у вас нет возможности установить значение со встроенной поддержкой для запуска изменения (не знаю, я использую React, только что нашел этот пост через 5 секунд google: stackoverflow.com/questions/50302062/…)? Потому что это означало бы, что вам не нужно взламывать Angular с дополнительной библиотекой ± 30 КБ «только для этого» :)

SidOfc 12.06.2019 13:02

Скорее всего, вы этого захотите:

$("._statusDDL").val('2');

ИЛИ ЖЕ

$('select').prop('selectedIndex', 3); 

Предполагается, что OP использует JQuery, хотя

Barry Michael Doyle 03.12.2016 11:00

@BarryMichaelDoyle, чего нет, потому что даже заголовок вопросов заканчивается на using JavaScript.

Iulian Onofrei 25.01.2018 19:14

Большая часть кода, упомянутого здесь, у меня не сработала!

Наконец, это сработало

window.addEventListener важен, иначе ваш JS-код будет запущен до того, как значения будут выбраны в параметрах.

    window.addEventListener("load", function () {
            // Selecting Element with ID - leaveCode  //
            var formObj = document.getElementById('leaveCode');

            // Setting option as selected
            let len;
            for (let i = 0, len = formObj.length; i < len; i++){
                if (formObj[i].value == '<value to show in Select>') 
                 formObj.options[i].selected = true;
            }
    });

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

самый короткий

Это улучшение размера Уильям ответ

leaveCode.value = '14';

leaveCode.value = '14';
<select id = "leaveCode" name = "leaveCode">
  <option value = "10">Annual Leave</option>
  <option value = "11">Medical Leave</option>
  <option value = "14">Long Service</option>
  <option value = "17">Leave Without Pay</option>
</select>

Другие вопросы по теме