我遇到一个问题,用一个对象数组中的选项填充选择。这是传递的数组:
data: [ { name: 'James' },
{ name: 'James 2' },
{ name: 'Peter' },
{ name: 'Paul' } ]
我的目标是填充名为" scheduleSelect"内有选项"数据"。下面的代码适用于除James 2之外的所有值,其中选项值设置为' James'然后数字2出现在引号之外。这是我的代码:
var arrayLength = data.length;
for (var i = 0; i < arrayLength; i++) {
$('#scheduleSelect').append('<option value='+data[i]["name"]+'>'+data[i]["name"]+'</option>')
};
这是一个不稳定的输出:
<option value="James">James</option>
<option value="James" 2>James 2</option>
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
尝试使用.appendTo()
:
data.forEach(function(v) {
var $opt = $('<option>');
$opt.val(v.name).text(v.name);
$opt.appendTo('#scheduleSelect');
};
我在这里创建一个新的option
并将其附加到您现有的选择中。我还改为使用forEach
来简化循环。
但是,出于性能原因(如果您循环使用4次以上),我建议您创建普通的旧DOM对象:
data.forEach(function(v) {
var opt = document.createElement('option');
opt.textContent = v.name;
opt.value = v.name;
$('#scheduleSelect').append(opt);
};
答案 1 :(得分:0)
您的问题是您在value
属性周围没有引号,因此浏览器会将所有内容都占用,直到下一个空格为值。
这将有效:
append('<option value="'+data[i]["name"]+'">'+data[i]["name"]+'</option>')
答案 2 :(得分:0)
试试这个:
var data = [ { name: 'James' },
{ name: 'James 2' },
{ name: 'Peter' },
{ name: 'Paul' } ];
var arrayLength = data.length;
for (var i = 0; i < arrayLength; i++) {
$('#scheduleSelect').append('<option value='+data[i]["name"]+'>'+data[i]["name"]+'</option>')
}