У меня есть следующий элемент 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 в качестве параметра?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать эту функцию:
selectElement('leaveCode', '11')
function selectElement(id, valueToSelect) {
let element = document.getElementById(id);
element.value = valueToSelect;
}
Отличный ответ, это намного проще, чем перебирать варианты. И это соответствует стандартам: dev.w3.org/html5/spec/…. Если есть несовместимости браузеров (конечно, есть :), мне было бы очень интересно узнать, что это такое. Это та вещь, вы обычно рассчитывать на ППК для, но он упорно отказывается, чтобы показать в моих поисках этой теме.
@Milan Возможно, проблема кроссбраузера заключается в том, что valueToSelect не существует в параметрах выбора, где браузеры могут вести себя по-разному (например, 1. не изменять текущее значение, или 2. устанавливать значение на null, или 3. принудительно устанавливать значение, чтобы оно было таким так или иначе...)? Я не пробовал себя, просто интересно.
А как насчет множественного выбора? Это не работает в случае нескольких вариантов (по крайней мере, в Chrome 25).
Важно отметить, что это фактически не отражает атрибут HTML value = "". <select> не поддерживает атрибут значения, и установка этого атрибута в вашем HTML абсолютно ничего не даст. value - это свойство, предоставляемое DOM API developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement
Как указал @ ring0, когда valueToSelect не существует, он вставляет пустую запись в chrome. тогда как IE и firefox сохраняют последнее выбранное значение.
Примечание для IE: <option> должен иметь атрибут value = 'valueToSelect'. Вы не можете использовать отображаемый текст в <option> .. </option> в качестве valueToSelect
Боковое примечание - в Chrome значение скрытого поля не будет динамически изменяться, поэтому оно должно быть видимым и / или отображаемым! = None;
Если вам нужно, чтобы событие изменения запускалось, вы также должны сделать: element.dispatchEvent(new Event('change'));
Не отвечая на вопрос, но вы также можете выбрать по индексу, где 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; ?
Боюсь, что сейчас я не могу это проверить, но в прошлом, я полагаю, мне приходилось давать каждому тегу option идентификатор, а затем я делал что-то вроде:
document.getElementById("optionID").select();
Если это не сработает, возможно, это приблизит вас к решению: P
HTMLOptionElement не имеет метода select() (он не определяет никаких дополнительных методов по сравнению со стандартным набором для всех элементов HTML). Однако вы можете установить для свойства selected значение true.
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<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
Есть ли способ также вызвать $ ('# leaveCode'). On ('change', function (), выполнив это?
$ ("# leaveCode"). val ("14"). change ();
Самый простой способ при необходимости:
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 элементами:
В 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.
Я пробовал указанные выше решения на основе 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 КБ «только для этого» :)
Скорее всего, вы этого захотите:
$("._statusDDL").val('2');
ИЛИ ЖЕ
$('select').prop('selectedIndex', 3);
Предполагается, что OP использует JQuery, хотя
@BarryMichaelDoyle, чего нет, потому что даже заголовок вопросов заканчивается на using JavaScript.
Большая часть кода, упомянутого здесь, у меня не сработала!
Наконец, это сработало
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>
см. мой ответ для сравнения производительности для разных методов