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>

leaveCode숫자를 매개 변수로 사용하는 JavaScript 함수를 사용 하여 목록에서 적절한 옵션을 어떻게 선택합니까?


다른 방법에 대한 성능 비교에 대한 내 답변을 참조하십시오
Toskan

답변:


532

이 기능을 사용할 수 있습니다 :

selectElement('leaveCode', '11')

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

4
좋은 대답은 옵션을 반복하는 것보다 훨씬 쉽습니다. 그리고 그것의 표준 준수 : dev.w3.org/html5/spec/...를 . 브라우저 비 호환성이있는 경우 (물론 다음이 있습니다.) 이들이 무엇인지 알고 싶습니다. 그것은 당신이 보통 ppk에 의존하는 종류이지만, 그는이 주제에 대한 나의 검색에 완고하게 거부합니다.
philo

9
그리고 다중 선택은 어떻습니까? 여러 옵션의 경우 (적어도 Chrome 25에서는) 작동하지 않는 것 같습니다.
Georgii Ivankin

2
@ ring0이 지적했듯이 valueToSelect가 존재하지 않으면 크롬에 빈 항목을 삽입합니다. 반면 IE와 파이어 폭스는 마지막으로 선택된 값을 유지합니다.
Karthik Bose

1
IE의 경우 : <option>에는 value = 'valueToSelect'속성이 있어야합니다. <option> .. </ option> 내에서 표시 텍스트를 valueToSelect로 사용할 수 없습니다.
Peter Quiring

4
변경 이벤트를 시작해야하는 경우 다음을 수행해야합니다. element.dispatchEvent(new Event('change'));
Patrick James McDougle

120

jQuery를 사용하는 경우 다음을 수행 할 수도 있습니다.

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

<option>값이 14 인를 선택합니다 .


일반 자바 스크립트를 사용하면 다음 두 가지 Document방법으로 도 달성 할 수 있습니다 .

  • 을 사용하면 document.querySelectorCSS 선택기를 기반으로 요소를 선택할 수 있습니다.

    document.querySelector('#leaveCode').value = '14'
  • 와 함께 더 확립 된 접근 방식을 사용하면 document.getElementById()함수의 이름에서 알 수 있듯이 다음을 기반으로 요소를 선택할 수 있습니다 id.

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

아래 코드를 스니핑하여 이러한 메소드와 jQuery 함수가 실제로 작동하는지 확인할 수 있습니다.


4
다중 선택에도 사용할 수 있습니다. 문자열 배열을 단일 문자열 대신 'val'함수에 전달하십시오. 참조 : stackoverflow.com/a/16583001/88409
Triynko

그렇게함으로써 $ ( '# leaveCode'). on ( 'change', function ()을 트리거하는 방법이 있습니까?
Lieuwe

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

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

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
형식화해서는 안됩니다 .Obj.leaveCode [i] .selected = true; 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 개의 요소를 가진 선택에 대한 출력 :

  • 1ms
  • 58ms
  • 612ms

Firefox 10의 경우 참고 :이 테스트를 수행 한 유일한 이유는 jQuery가 ~ 2000 개의 항목으로 목록에서 성능이 저하 되었기 때문입니다 (옵션 사이에 더 긴 텍스트가 있음). val () 후 약 2 초 지연되었습니다.

참고 사항 : 텍스트 값이 아닌 실제 값에 따라 값을 설정하고 있습니다.


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

선택을 "연간 휴가"로 설정해야합니다.


9

위와 같은 JavaScript / jQuery 기반 솔루션을 시도했습니다.

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

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

필수 <select> 요소 가있는 AngularJS 앱에서

AngularJS 양식 유효성 검사가 시작되지 않기 때문에 어느 것도 작동하지 않습니다. 올바른 옵션이 선택되어 있고 형식으로 표시되었지만 입력이 유효하지 않은 상태 ( ng-pristine ng-invalid) 클래스는 여전히 존재 함).

AngularJS 유효성 검사를 강제하려면 옵션을 선택한 후 jQuery change ()를 호출하십시오 .

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

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

이미 Angular로 할 수 있는데 왜 jQuery를 사용합니까? Angular 자체를 사용할 때 변경 트리거를 기본적으로 지원하여 값을 설정할 수있는 기능이 없습니다 (아무도, React를 사용하고 5 초 후에 Google 이이 게시물을 찾았습니다 : stackoverflow.com/questions/ 50302062 /… )? 그것은 당신이 추가적인 ± 30kb 라이브러리를 가지고 Angular를 해킹 할 필요가 없다는 것을 의미하기 때문에 "이것을 위해":)
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에? option = 1 또는 2가 있습니다.

2) 이 코드를 두 번째 페이지에 넣으십시오 (my case 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>

.. 등등.
따라서 이것은 URL의 GET을 통해 값을 다른 페이지 (선택 옵션 목록 포함)에 전달하는 쉬운 방법입니다. 양식이나 ID가 없습니다. 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
16 개의 기존 답변이있는 11 년 된 질문에 대한 답변을 추가 할 때 답변의 새로운 측면을 지적하는 것이 매우 중요합니다. 그렇지 않은 경우 변경 사항이 미묘한 경우 누락 될 수 있으며 답변이 늦은 복제본으로 제거 될 수 있습니다. 작동 방식과 이유에 대한 설명을 추가하면 거의 항상 코드 만 답변을 개선 할 수 있습니다.
Jason Aller

-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
이것은 OP가 JQuery를 사용한다고 가정합니다
Barry Michael Doyle

2
@BarryMichaelDoyle은 질문의 제목조차로 끝나기 때문에 아닙니다 using JavaScript.
Iulian Onofrei

-6

나는 현재 이것을 테스트 할 수 없다고 두려워하지만 과거에는 각 옵션 태그에 ID를 부여해야한다고 생각한 다음과 같은 일을했다.

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

그래도 작동하지 않으면 솔루션에 더 가까이 갈 수 있습니다.


3
HTMLOptionElement는 이없는 select()(이 모든 HTML 요소의 표준 세트 이상 추가 방법을 정의하지 않습니다) 방법을. 그러나 selected속성을 true로 설정할 수 있습니다 .
MrWhite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.