如何使用jQuery向DropDownList添加选项?


Answers:


451

无需使用任何额外的插件,

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

如果您有很多选择,或者该代码需要经常运行,那么您应该考虑使用DocumentFragment,而不是不必要地多次修改DOM。对于少数几个选项,我会说这是不值得的。

- - - - - - - - - - - - - - - - 添加 - - - - - - - - - --------------

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
方法参数有点误导,例如,函数(val,text)应该是函数(index,option)。否则效果很好。
mbillard

14
@Crossbrowser:我不同意- valtext实际描述变量及其用途。
尼克

1
仅作为示例,但是作为通用方法,这些变量具有误导性(它使我不知道如何使用该方法)。但是,我给出的答案不是关于$ .each方法的使用。
mbillard

1
我以前使用mySelect.append(new Option(text, val));,但在IE8中不起作用。我不得不改用@nickfmySelect.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
如何设置属性,例如选择默认值?
克里希南

20
我喜欢这一"<option></option>"方法胜过方法。好像很脏
Josh M.

1
在IE8中不起作用..只是尝试了一下,还看到了下面对此的另一条评论。
briansol

13

使用插件:jQuery Selection Box。你可以这样做:

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的常见Dropdown操作(获取,设置,添加,删除)


1
如果在选项参数中使用双引号,它们将关闭函数并中断脚本。更改.prepend("...") / $("...").prepend('...') / $('...')可以修复代码段。
Heraldmonkey '16

4

请注意@Phrogz的解决方案在IE 8中不起作用,而@nickf的解决方案在所有主要浏览器中都起作用。另一种方法是:

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

3

你可以直接使用

$"(.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”,依此类推)。

荒谬的是,我无法在第二个中使用thisthis.Object$.obj类似的东西.each(),但是---我实际上必须获取该对象的特定ID,然后在将其附加之前将整个对象传递给我的函数。幸运的是,我的下拉菜单的ID用“ _”分隔,我可以抓住它。我不认为我必须这样做,但是否则它一直给我jQuery异常。那些为我所苦的人可能会知道。


为什么要在每个计数器中增加计数器?您是jquery新手吗?var counter = $('[[id * =“ ddlPosition _”]])。length不太冗长,效率更高。我认为您需要更多经验才能开始发布代码。这不是生产质量代码,因为对于这样的琐碎任务,它编写得很差并且过于复杂。没有冒犯,但您有58个答案却没有投票的理由。
雅典Holloway 2014年

您显然误解了我的创造。计数器的作用是增加下拉列表中发布的值,而我有几个具有相同的ID,但结尾处带有不同的“ _ ##”,因此.length()会不准确。这就是选择器中使用“ id * =”的原因。
vapcguy 2014年

至于我的其他答案,一般来说,我也会尽可能提倡使用更简单的方法,如果人们对代码的理解不是那么深奥,并且编写的东西更加简化,我的答案可能会获得更多的选票。但是人们想让自己看起来很聪明,所以他们不会选择那么简单的东西。想要简单地从事这个行业并不会使我错。我既不喜欢进行故障排除,也不喜欢建立在比别人复杂得多的代码上。
vapcguy 2014年

如果有人可以解释为什么将“ $(this)”而不是对象发送给myAppender无效,我可能会对循环中的$(this).length()更有信心。
vapcguy 2014年

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;');
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.