jQuery를 사용하여 DropDownList에 옵션을 어떻게 추가합니까?


291

질문에 따르면 jQuery를 사용하여 DropDownList에 새 옵션을 어떻게 추가합니까?

감사


궁금한 점이 있는데, 왜이 질문이 다운 봇 되었습니까? 아마 코드 스 니펫을 표시하지 않기 때문에 :)
shasi kanth

답변:


451

추가 플러그인을 사용하지 않고

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
var mySelect = $('#mySelect');
$.each(myOptions, function(val, text) {
    mySelect.append(
        $('<option></option>').val(val).html(text)
    );
});

많은 옵션이 있거나이 코드를 매우 자주 실행해야하는 경우 DOM을 불필요하게 여러 번 수정하는 대신 DocumentFragment 를 사용해야합니다 . 소수의 옵션에 대해서만 가치가 없다고 말하고 싶습니다.

------------------------------- 추가 ------------------ --------------

DocumentFragment속도 향상에는 좋은 옵션이지만 document.createElement('option')IE6 및 IE7에서 지원하지 않기 때문에 옵션 요소를 사용할 수 없습니다 .

우리가 할 수있는 일은 새로운 select 요소를 만들고 모든 옵션을 추가하는 것입니다. 루프가 완료되면 실제 DOM 객체에 추가하십시오.

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
var _select = $('<select>');
$.each(myOptions, function(val, text) {
    _select.append(
            $('<option></option>').val(val).html(text)
        );
});
$('#mySelect').append(_select.html());

이런 식으로 DOM을 한 번만 수정합니다!


8
메소드 매개 변수는 약간 오해의 소지가 있습니다. 예를 들어 function (val, text)은 function (index, option)이어야합니다. 그렇지 않으면 잘 작동합니다.
mbillard

14
@ Crossbrowser : 나는 동의하지 val않으며 text실제로 변수와 그 사용법을 설명합니다.
nickf

1
그러나이 예제의 경우 일반적인 방법으로 이러한 변수가 잘못되어 있습니다 (그 방법을 사용하는 방법에 대한 실마리는 없었습니다). 그러나 나는 $ .each 메소드의 사용에 대한 대답이 아니라고 말할 것이다.
mbillard

1
mySelect.append(new Option(text, val));IE8에서는 작동하지 않는 이전 에을 사용하고있었습니다. @ nickf 's로 전환해야했습니다mySelect.append($('<option></option>').val(val).html(text));
Matthew Clark

5
@briansol :.attr('selected', true|false)
nickf

167

플러그인이 없으면 많은 jQuery를 사용하지 않고도 약간 더 오래된 학교로 갈 수 있습니다.

var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
$.each(myOptions, function(val, text) {
    $('#mySelect').append( new Option(text,val) );
});

옵션 a)가 기본적으로 선택된 값인지 여부와 b)를 지금 선택해야하는지 여부를 지정하려면 두 개의 매개 변수를 더 전달할 수 있습니다.

    var defaultSelected = false;
    var nowSelected     = true;
    $('#mySelect').append( new Option(text,val,defaultSelected,nowSelected) );

1
기본값 선택과 같은 속성을 어떻게 설정합니까?
Krishnan 2016 년

20
"<option></option>"방법보다이 방법 이 더 좋습니다 . 더러워 보인다.
Josh M.

1
ie8에서 작동하지 않습니다. 그냥 시도하고 아래에 다른 의견을 보았습니다.
briansol

13

플러그인 : jQuery 선택 상자 . 당신은 이것을 할 수 있습니다 :

var myOptions = {
        "Value 1" : "Text 1",
        "Value 2" : "Text 2",
        "Value 3" : "Text 3"
    }
    $("#myselect2").addOption(myOptions, false); 

11

DropDown을 먼저 지우고 싶을 수도 있습니다. $ ( '# DropDownQuality'). empty ();

MVC의 컨트롤러가 항목이 하나만있는 선택 목록을 반환하도록했습니다.

$('#DropDownQuality').append(
        $('<option></option>').val(data[0].Value).html(data[0].Text));    

7

처음에 나열 할 항목 추가

$("#ddlList").prepend('<option selected="selected" value="0"> Select </option>');

마지막에 나열 할 항목 추가

$('<option value="6">Java Script</option>').appendTo("#ddlList");

jQuery를 사용한 일반적인 드롭 다운 작업 (Get, Set, Add, Remove)


1
옵션 매개 변수 안에 큰 따옴표를 사용하면 함수가 닫히고 스크립트가 중단됩니다. 변경 .prepend("...") / $("...")하려면 .prepend('...') / $('...')스 니펫을 해결하는 것입니다.
Heraldmonkey

4

Peas note @Phrogz의 솔루션은 IE 8에서 작동하지 않지만 @nickf는 모든 주요 브라우저에서 작동합니다. 다른 접근법은 다음과 같습니다.

$.each(myOptions, function(val, text) {
    $("#mySelect").append($("&lt;option/&gt;").attr("value", val).text(text));
});

3

U는 직접 사용할 수 있습니다

$"(.ddlClassName").Html("<option selected=\"selected\" value=\"1\">1</option><option value=\"2\">2</option>")

-> 여기서 직접 문자열을 사용할 수 있습니다



0

jquery를 사용하면 사용할 수 있습니다

      this.$('select#myid').append('<option>newvalue</option>');

여기서 " myid "는 드롭 다운 목록 의 ID 이고 newvalue 는 삽입하려는 텍스트입니다.


0

내 페이지에 드롭 다운이있는 것처럼 드롭 다운에 옵션을 많이 추가해야했습니다. 그래서 나는 이것을 이런 식으로 사용했습니다 :

function myAppender(obj, value, text){
    obj.append($('<option></option>').val(value).html(text));
}

$(document).ready(function() {
    var counter = 0;
    var builder = 0;
    // Get the number of dropdowns
    $('[id*="ddlPosition_"]').each(function() {
        counter++;
    });

    // Add the options for each dropdown
    $('[id*="ddlPosition_"]').each(function() {
        var myId = this.id.split('_')[1];

        // Add each option in a loop for the specific dropdown we are on
        for (var i=0; i<counter; i++) {
            myAppender($('[id*="ddlPosition_'+myId+'"]'), i, i+1);
        }
        $('[id*="ddlPosition_'+myId+'"]').val(builder);
        builder++;
    });
});

이렇게하면 1에서 n과 같은 값으로 드롭 다운이 동적으로 설정되고 드롭 다운이있는 순서의 값을 자동으로 선택합니다 (예 : 상자에서 두 번째 드롭 다운에 "2"가 있음).

내가 사용할 수 없다는 말도했다 this거나 this.Object또는 $.obj제 2의 그런 또는 아무것도 .each()실제로 해당 개체의 특정 ID를 가져온 다음 잡아하고 추가 할 것입니다 전에 내 기능에 그 전체 개체를 전달했다 --- 불구하고. 다행히도 내 드롭 다운의 ID는 "_"로 분리되어 있습니다. 필자가해야한다고 생각하지는 않지만 그렇지 않으면 jQuery 예외가 계속 발생합니다. 내가 알고있는 것에 대해 어려움을 겪고있는 다른 사람들은 알고있는 것을 좋아할 것입니다.


각각의 카운터를 증가시키는 이유는 무엇입니까? jquery를 처음 사용하십니까? var counter = $ ( '[id * = "ddlPosition _"]'). length는 덜 장황하고 더 효율적입니다. 코드 게시를 시작하기 전에 약간의 경험이 필요하다고 생각합니다. 이것은 사소한 작업을 위해 잘못 작성되고 지나치게 복잡하기 때문에 생산 품질 코드가 아닙니다. 위법 행위는 없지만 58 번의 답변과 반대 투표권이없는 이유가 있습니다.
Athens Holloway '12

당신은 분명히 내가 만들고있는 것을 오해했습니다. 카운터는 드롭 다운에 게시 된 값을 늘리는 것입니다. 끝에 다른 "_ ##"을 가진 동일한 ID를 가진 여러 항목이 있었으므로 .length ()가 정확하지 않았습니다. 이것이 선택기의 "id * ="에 대한 이유입니다.
vapcguy

다른 답변은 일반적으로 가능한 한 간단한 방법을 옹호하며 사람들이 코딩에 대해 난해하지 않고 더 단순화 된 내용을 작성한 경우 내 답변에 더 많은 투표가있을 것입니다. 그러나 사람들은 자신을 똑똑하게 보이기를 원하므로 그렇게 간단한 것을 선택하지 않을 것입니다. 단순히 업계를 원한다고 잘못 생각하지는 않습니다. 나는 필요 이상으로 엄청나게 복잡한 다른 사람들의 코드를 문제 해결하거나 구축하는 것을 좋아하지 않습니다.
vapcguy

또한 누군가 myAppender에 객체 대신 "$ (this)"를 보내지 않는 이유를 설명 할 수 있다면 루프에서 $ (this) .length ()에 대해 더 많은 확신을 가질 수 있습니다.
vapcguy

0

응답이 "successData"라고 생각할 수 있습니다. 드롭 다운 메뉴에서 옵션으로 추가해야하는 목록이 포함되어 있습니다.

success: function (successData) {
var sizeOfData = successData.length;
if (sizeOfData == 0) {
    //    NO DATA, throw an alert ...
    alert ("No Data Found");
} else {
    $.each(successData, function(val, text) {
        mySelect.append(
            $('<option></option>').val(val).html(text)
        );
    });
} }

이것은 당신을 위해 일할 것입니다 ....


-1

이 기능을 사용해보십시오 :

function addtoselect(param,value){
    $('#mySelectBox').append('&lt;option value='+value+'&gt;'+param+'&lt;/option&gt;');
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.