使用jquery或JS填充Html.DropDownList

时间:2012-04-09 18:06:30

标签: javascript jquery

这就是我所拥有的:

for (i = 0; i < data.length; i++) {
                $("#myDropDownLisTId").find('tbody')  
                .append($('<option>').attr('value', data[i].id).attr('name', data[i].name)
                );               
            }

但是下拉列表始终保持不变。为什么这不起作用?数据变量具有漂亮的价值。 另外,我想在for循环之前清空下拉列表/如何做到这一点?

以下是视图中的下拉列表:

<%= Html.DropDownList("myDropDownLisTId")%>

4 个答案:

答案 0 :(得分:4)

虽然其他答案将完成您想要做的事情,但我建议您将选项HTML写入字符串变量并在循环结束后附加它,而不是在循环中附加。当列表变长时,这会有一些明显的性能优势。使用.html()也会每次都清空列表。

        var tempList = '';
        for (i = 0; i < data.length; i++) {  
            tempList += '<option value="' + data[i].id + '" name="' + data[i].name +'">' + data[i].text + '</option>';            
        }
        $("#myDropDownLisTId").html(tempList);

答案 1 :(得分:2)

试试这个。

$.each(data, function() {
   $("#myDropDownLisTId").append($("<option />").val(this.id).text(this.Text));
 });

检查我的this answer,了解有关如何从MVC操作中获取数据以加载下拉列表的更多详细信息

编辑:根据删除现有数据的评论

$("#myDropDownLisTId").empty()
$.each(data, function() {
   $("#myDropDownLisTId").append($("<option />").val(this.id).text(this.Text));
 });

编辑2: Idrumsgood的回答非常好。而不是每次在循环内调用append方法,只需将值保留在变量中并仅调用html方法一次。

http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly

var items=""
$.each(data, function() {
   items+="<option value='" + this.id + "'>" + this.Text + "</option>";
 });
$("#myDropDownLisTId").html(items);

答案 2 :(得分:1)

这似乎有效:http://jsfiddle.net/ykFJd/2/

JS

var data = [
    {id:'0', name:'test 0'},  
    {id:'1', name:'test 1'},
    {id:'2', name:'test 2'},
    {id:'3', name:'test 3'},
    {id:'4', name:'test 4'},    
];


for (var i = 0; i < data.length; i++) {
    $("#myDropDownLisTId").append(
        $('<option />', {
            'value': data[i].id,
            'name': data[i].name,
            'text': data[i].name
        })
    );               
}​

答案 3 :(得分:0)

我写了一个很好的函数来将js哈希绑定到选择列表。请参阅我在Best way to populate select list with JQuery / Json?

的回答

使用示例:

// you can easily pass in response.d from an AJAX call if it's JSON formatted
var users = [ {id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Cindy'} ]
setSelectOptions($('#selectList'), users, 'id', 'name');