Jak dodać opcje do DropDownList za pomocą jQuery?

Jak mówi pytanie, Jak dodać nową opcję do DropDownList za pomocą jQuery?

Thanks

Author: Earlz, 2008-11-25

11 answers

Bez użycia dodatkowych wtyczek,

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

Jeśli miałeś wiele opcji lub kod ten musiał być uruchamiany bardzo często, powinieneś rozważyć użycie DocumentFragment zamiast niepotrzebnie modyfikować DOM. Dla tylko kilku opcji, powiedziałbym, że nie jest tego warte.

------------------------------- Dodano --------------------------------

DocumentFragment jest dobrą opcją dla zwiększenia prędkości, ale nie możemy utworzyć elementu option używając document.createElement('option') ponieważ IE6 i IE7 go nie wspierają.

Możemy utworzyć nowy element select, a następnie dodać wszystkie opcje. Po zakończeniu pętli dołącz ją do rzeczywistego obiektu 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());

W ten sposób zmodyfikujemy DOM tylko raz!

 445
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-18 08:09:16

Bez wtyczek, może to być łatwiejsze bez użycia jak największej ilości jQuery, zamiast tego będzie nieco bardziej oldskulowe:

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

Jeśli chcesz określić, czy opcja a) jest domyślną wartością, a b) powinna być wybrana teraz, możesz przekazać dwa dodatkowe parametry:

    var defaultSelected = false;
    var nowSelected     = true;
    $('#mySelect').append( new Option(text,val,defaultSelected,nowSelected) );
 159
Author: Phrogz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-10 14:49:38

Z pluginem: pole wyboru jQuery . Możesz to zrobić:

var myOptions = {
        "Value 1" : "Text 1",
        "Value 2" : "Text 2",
        "Value 3" : "Text 3"
    }
    $("#myselect2").addOption(myOptions, false); 
 13
Author: cgreeno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-12 17:47:05

Możesz najpierw wyczyścić listę rozwijaną $('#DropDownQuality').pusty();

Mój kontroler w MVC zwrócił listę select z tylko jednym elementem.

$('#DropDownQuality').append(
        $('<option></option>').val(data[0].Value).html(data[0].Text));    
 9
Author: Har,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-23 20:42:21

Dodaj element do listy na początku

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

Dodaj element do listy na końcu

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

Common Dropdown operation (Get, Set, Add, Remove) using jQuery

 7
Author: Zakaria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-03 06:59:37

Pease note rozwiązanie @ Phrogz nie działa w IE 8, podczas gdy @nickf działa we wszystkich głównych przeglądarkach. Inne podejście to:

$.each(myOptions, function(val, text) {
    $("#mySelect").append($("&lt;option/&gt;").attr("value", val).text(text));
});
 4
Author: Marshal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 01:15:10

U można użyć bezpośredniego

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

- > Tutaj można użyć bezpośredniego ciągu

 3
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-20 09:14:41

A także używać .prepend (), aby dodać opcję do początku listy opcji. http://api.jquery.com/prepend/

 3
Author: Johan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-29 05:51:08

Używając jquery możesz użyć

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

Gdzie " myid " jest id listy rozwijanej, a newvalue jest tekstem, który chcesz wstawić..

 0
Author: chopss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-12 09:44:20

Musiałem dodać tyle opcji do rozwijanych, ile było rozwijanych na mojej stronie. Więc użyłem go w ten sposób:

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

To dynamicznie ustawia listy rozwijane o wartościach od 1 do n i automatycznie wybiera wartość dla kolejności, w jakiej była rozwijana (tzn. 2. rozwijane ma "2" w polu, itd.).

To było śmieszne, że nie mogłem użyć this lub this.Object lub $.obj lub czegoś podobnego w moim 2nd .each(), chociaż - - - właściwie musiałem uzyskać konkretny ID tego obiektu, a następnie chwyć i przekaż cały obiekt do mojej funkcji, zanim się dopisze. Na szczęście identyfikator mojego rozwijanego menu został oddzielony przez " _ " i mogłem go złapać. Nie czuję, że powinienem był, ale to ciągle dawało mi wyjątki jQuery inaczej. Coś, co inni zmagają się z tym, czym byłem, może cieszyć się wiedzą.

 0
Author: vapcguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-20 02:51:46

Spróbuj tej funkcji:

function addtoselect(param,value){
    $('#mySelectBox').append('&lt;option value='+value+'&gt;'+param+'&lt;/option&gt;');
}
 -1
Author: Sebastian Mach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-23 20:51:02