好的,我花了很多时间查看示例,但找不到一个对我的情况有所帮助。我有一个JSON文件,简化了这个例子:
{
"Company":[
{
"Position": "Manager",
"Name": {
"11": "joe",
"12": "bill",
"166": "John"
}
},
{
"Position": "Tech",
"Name": {
"11": "Bob",
"12": "Cindy",
"166": "Karl"
}
},
{
"Position": "Sales",
"Name": {
"11": "Sam",
"12": "Ron",
"166": "Sara"
}
}
]}
我正在尝试创建2个选择框。当用户选择第一个位置框时,它将使用属性(名称)自动填充第二个位置。所以这就是我到目前为止所做的:
<select id="job"></select>
<select id="name"></select>
和代码:
$select = $('#job');
$select2 = $('#name');
$.ajax({
url: 'factors.json',
dataType: 'JSON',
success: function(data) {
$select.html('');
$.each(data.Company, function(key, val) {
$select.append('<option id="' + key + '">' + val.Position + '</option>');
$("#job").change(function() {
$.each(val.Name, function(key2, val2) {
$select2.append('<option id="' + key2 + '">' + val2 + '</option>');
})
})
})
},
});
此代码将自动填充第二个框,其中包含每个位置的所有名称。我似乎无法弄清楚如何用每个独特对象的名称填充它。谢谢你的帮助!
答案 0 :(得分:1)
这应该可以解决问题。
$.each(data.Company, function(key, val) {
$select.append('<option id="' + key + '">' + val.Position + '</option>');
});
$("#job").change(function(e) {
$select2.empty();
$index = $(this).children(':selected').attr('id');
for (var k in data.Company[$index].Name) {
$select2.append('<option id="' + k + '">' + data.Company[$index].Name[k] + '</option>');
}
});
答案 1 :(得分:1)
尝试这样的事情。你应该有一个值属性供你选择。我在选项中添加了一个data-id attr,因此我可以用它来存储Position的索引。
$.each(data.Company, function(i, v) {
// create option with value as index - makes it easier to access on change
var options = $('<option/>', {value: v.Position, text: v.Position}).attr('data-id',i);
// append the options to job selectbox
$('#job').append(options);
});
// bind change event
$('#job').change(function() {
// cache this
var $el = $(this);
// get data-id attr from selected option
var id = $('option:selected',this).data('id');
// empty select
$('#name').empty();
// get name values for selected option
$.each(data.Company[id].Name, function(i, v) {
// create option elements
var options = $('<option/>', {value: v, text: v});
// append the options to name selectbox
$('#name').append(options);
});
}).change();// trigger change() on page load to fill name selectbox