这就是我所拥有的:
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")%>
答案 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');