Як я можу програматично встановити значення елемента виділення за допомогою JavaScript?


420

У мене є такий 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номером в якості параметра, як вибрати відповідний варіант у списку?


дивіться мою відповідь для порівняння ефективності для різних методів
Тоскан

Відповіді:


532

Ви можете використовувати цю функцію:

selectElement('leaveCode', '11')

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

4
Чудова відповідь, це простіше, ніж прокручування параметрів. І це відповідає стандартам: dev.w3.org/html5/spec/… . Якщо є несумісність браузера (звичайно, є :) Мені буде дуже цікаво дізнатися, що вони є. Це звичайна річ, на яку ти зазвичай розраховуєш ppk, але він вперто відмовляється з'являтися в моїх пошуках цієї теми.
філо

9
А як щодо множини вибору? Схоже, це не працює у випадку декількох варіантів (принаймні в Chrome 25).
Георгій Іванкін

2
Як зазначав @ ring0, коли valueToSelect не існує, він вставляє порожній запис у chrome. тоді як IE і firefox зберігає останнє вибране значення.
Karthik Bose

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

4
Якщо вам потрібна подія зміни, яку потрібно звільнити, вам слід також зробити: element.dispatchEvent(new Event('change'));
Патрік Джеймс МакДугл

120

Якщо ви використовуєте 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 в дії:


4
Це також можна використовувати для вибору з декількома виборами; просто передайте масив рядків функції 'val' замість однієї рядка. Див: stackoverflow.com/a/16583001/88409
Triynko

Чи можна також запустити $ ('# LeaveCode'). On ('змінити', функцію (), зробивши це?
Lieuwe

5
$ ("# LeaveCode"). val ("14"). change ();
Лорен


16

Не відповідає на питання, але ви також можете вибрати за індексом, де 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;

4
Не повинен formObj.leaveCode [i] .selected = true; be formObj.options [i] .selected = true; ?
Девід Крістофер Рейнольдс

14

Я порівняв різні методи:

Порівняння різних способів того, як встановити значення вибору за допомогою 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 ()

Зверніть увагу також: я встановлюю значення залежно від реального значення, а не текстового значення.


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

Це повинно встановити вибір на "Щорічні відпустки"


9

Я спробував описані вище JavaScript / jQuery рішення, такі як:

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

і

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

в додатку AngularJS, де був необхідний елемент <select>.

Жоден з них не працює, оскільки перевірка форми AngularJS не запускається. Хоча правильний параметр був обраний (і відображається у формі), вхід залишився недійсним ( класи ng-pristine та ng-invalid все ще присутні).

Щоб примусити перевірку AngularJS, виберіть jQuery change () після вибору параметра:

$("#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

3

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


3

Найпростіший спосіб, якщо вам потрібно:
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-адреса сторінки має? варіант = 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 кроки, і це працює ідеально.


1

Чому б не додати змінну для Id елемента і не зробити його багаторазовою функцією?

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

1

Припустимо, ваша форма названа 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;
    }
  }
}

1

Повинно бути щось таке:

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;
}

0
function selecetElement() {
 var selectedValue = document.getElementById('leaveCode');
 selectedValue.value = "11";
}

2
Коли ви додаєте відповідь на одинадцятирічне запитання із шістнадцятьма існуючими відповідями, дуже важливо вказати, який новий аспект питання стосується вашої відповіді. Якщо цього не зробити, і ваша зміна є тонкою, вона може бути пропущена, а ваша відповідь видалена як пізній дублікат. Відповіді на код тільки майже завжди можна покращити, додавши пояснення як і чому вони працюють.
Джейсон Аллер

-1

Якщо ви використовуєте 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>';

-1

Ви, швидше за все, хочете цього:

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

АБО

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

8
Це припущення, що ОП використовує JQuery, хоча
Баррі Майкл Дойл

2
@BarryMichaelDoyle, що ні, тому що навіть назва запитань закінчується using JavaScript.
Юліан Онофрей

-6

Боюсь, я не можу перевірити це на даний момент, але в минулому я вважаю, що мені довелося надати кожному тегу опції ідентифікатор, і тоді я зробив щось на кшталт:

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

Якщо це не працює, можливо, це наблизить вас до рішення: P


3
У HTMLOptionElement немає select()методу (він не визначає додаткових методів над стандартним набором для всіх елементів HTML). Однак ви можете встановити selectedвластивість true.
MrWhite
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.