선택 상자의 선택된 옵션 설정


352

페이지로드시 표시되도록 이전에 선택된 옵션을 설정하고 싶습니다. 다음 코드로 시도했습니다.

$("#gate").val('Gateway 2');

<select id="gate">
    <option value='null'>- choose -</option>
    <option value='gateway_1'>Gateway 1</option>
    <option value='gateway_2'>Gateway 2</option>
</select>

그러나 이것은 작동하지 않습니다. 어떤 아이디어?


10
실제로 그것이 작동하는 방식입니다. document.ready ()에서 값을 설정 하시겠습니까? 선택 상자가 아직 준비되지 않은 경우 코드가 실행될 수 있습니다.
Morph

답변:


495

이것은 분명히 작동합니다. 여기 데모가 있습니다. 코드를 다음에 배치했는지 확인하십시오 $(document).ready.

$(function() {
    $("#gate").val('gateway_2');
});

4
좋아, 목록을 드롭 다운하면 목록이 강조 표시되지만 목록의 첫 번째 요소로 표시되지 않습니다
Upvote

2
아아 나는 문서 준비 기능에 없다고 선언했다 ... 감사합니다!
Upvote

7
"selected"속성을 "selected"로 설정하는 것만으로는 좋지 않습니다.
Adal

6
@Adal 왜 'selected'속성을 'selected'로 설정하는 것보다 좋지 않습니까?
Shawn

26
다른 사람이 궁금해 'Gateway 2'하는 경우 함수에 전달 된 것은 텍스트가 아닌 선택 옵션 valvalue속성 값과 일치합니다 . 내가 의미하는 바에 대한 예는 Darin 데모의 약간 편집 된 버전 인 이 JSFiddle을 참조하십시오 .
Kenny Evitt

166
$(document).ready(function() {
    $("#gate option[value='Gateway 2']").prop('selected', true);
    // you need to specify id of combo to set right combo, if more than one combo
});

37

$('#gate').val('Gateway 2').prop('selected', true);


2
$('#your-select-box-id :nth-child(2)').prop('selected', true)드롭 박스를 시각적으로 업데이트하여 작동하는 것과 매우 유사합니다 .
Big Rich

나를 위해 일한 사람 만. 맞춤 선택 라이브러리를 사용하고 있기 때문에 의심됩니다.
Louis M.

15

jQuery .val () 메소드를 사용하여 중요한 단점을 발견했습니다.

<select id="gate"></select>
$("#gate").val("Gateway 2");

이 선택 상자 (또는 다른 입력 개체)가 양식에 있고 양식에 사용 된 재설정 버튼이있는 경우 재설정 버튼을 클릭하면 설정 값이 지워지고 예상대로 시작 값으로 재설정되지 않습니다.

이것은 나에게 가장 잘 작동하는 것 같습니다.

선택 상자

<select id="gate"></select>
$("#gate option[value='Gateway 2']").attr("selected", true);

텍스트 입력

<input type="text" id="gate" />
$("#gate").attr("value", "your desired value")

텍스트 영역 입력

<textarea id="gate"></textarea>
$("#gate").html("your desired value")

확인란의 경우

<input type="checkbox" id="gate" />
$("#gate option[value='Gateway 2']").attr("checked", true);

라디오 버튼

<input type="radio" id="gate" value="this"/> or <input type="radio" id="gate" value="that"/>
$("#gate[value='this']").attr("checked", true);

12
  $("#form-field").val("5").trigger("change");

1
이것에 관한 정보를 포함 시키면 좋을 것입니다. 이것은 선택에 대한 변경을 감시하는 코드가있는 경우 어떻게해야 하는지를 보여주는 좋은 예입니다.
sean.boyer


6

이것은 다른 옵션입니다.

$('.id_100 option[value=val2]').prop('selected', true);

6

나는 같은 문제가 있었다.

해결 방법 : 새로 고침을 추가하십시오.

$("#gate").val('Gateway 2');
$("#gate").selectmenu('refresh');

3
이것은 표준 HTML이 아닌 jqueryui selectmenu에만 해당됩니다
stuartdotnet

3

여러 번 반복되는 답변이 있지만 지금은 jquery 또는 다른 외부 라이브러리가 필요하지 않으며 다음과 같이 쉽게 수행 할 수 있습니다.

document.querySelector("#gate option[value='Gateway 2']").setAttribute('selected',true);
<select id="gate">
    <option value='null'>- choose -</option>
    <option value='Gateway 1'>Gateway 1</option>
    <option value='Gateway 2'>Gateway 2</option>
</select>


훌륭한 솔루션. 이전에 선택한 옵션에서 선택된 속성을 제거하지 않는 것 같습니다
Systems Rebooter

3

경우에 따라

$('#gate option[value='+data.Gateway2+']').attr('selected', true);

1

내 문제

get_courses(); //// To load the course list
$("#course").val(course); //// Setting default value of the list

나는 같은 문제가 있었다. 코드와의 유일한 차이점은 아약스 호출을 통해 선택 상자를로드하고 아약스 호출이 실행되는 즉시 선택 상자의 기본값을 설정했다는 것입니다

해결책

get_courses();
   setTimeout(function() {
     $("#course").val(course);
  }, 10);

1
문제를 올바르게 분석했지만 해결책이 나쁘고 취약합니다. ajax 호출에 첨부 된 콜백 함수를 사용해야합니다
icksde

-1

호출 전에 구문 오류로 인해 값이 설정되지 않은 문제가있었습니다.

$("#someId").value(33); //script bailed here without showing any errors Note: .value instead of .val
$("#gate").val('Gateway 2'); //this line didn't work.

호출하기 전에 구문 오류를 확인하십시오.


4
구문 오류를 확인해야한다는 점을 기억하면 유용한 정보가 아닙니다.
Shotgun Ninja


-2
// Make option have a "selected" attribute using jQuery

var yourValue = "Gateway 2";

$("#gate").find('option').each(function( i, opt ) {
    if( opt.value === yourValue ) 
        $(opt).attr('selected', 'selected');
});

1
이것은 선택된 값을
지나쳐도

.attr()이 답변을 게시하기 전부터 Plus 는 잘못된 방법이었습니다.
Auspex

-2

@icksde 및 @Korah에 추가 (둘 다 둘 다!)

AJAX로 옵션 을 빌드 할 때 문서가 작성되기 전에 document.ready가 트리거 될 수 있습니다.

작동하지 않습니다

$(document).ready(function() {
    $("#gate").val('Gateway 2');
});

이것은 않습니다

시간 초과는 작동하지만 @icksde가 허약하다고 말합니다 (실제로 10ms 대신 20ms가 필요했습니다). 다음과 같이 AJAX 함수에 맞추는 것이 좋습니다.

$("#someObject").change(function() {
    $.get("website/page.php", {parameters}, function(data) {
        $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>");
        $("#gate").val('Gateway 2');
    }, "json");
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.