json 数组中以单个选项而不是多个选项显示的数据
data showing in single option instead of multiple option from json array
我在 JSON 文件中有一个 JSON 数组,如下所示:
{
"states": [
{
"state": "Andhra Pradesh",
"districts": [
"Anantapur",
"Chittoor",
"East Godavari",
"Guntur",
"Krishna",
"Kurnool",
"Nellore",
"Prakasam",
"Srikakulam",
"Visakhapatnam",
"Vizianagaram",
"West Godavari",
"YSR Kadapa"]
}
]
}
并且我能够成功地加载 select 元素中的所有状态作为依赖 select 选项
.当我 select 来自 select 元素的状态时,它会填充区域 select 元素中的相关数组。
但不是数组显示单独的选项,而是显示为一个选项:
我应该以不同的格式修改我的 JSON 数组吗?
jquery
$('#statePicker').on('change', function() {
$("#cityPicker").html('');
$.ajax({
url: "{{ asset('json/in-sc-list.json') }}",
type: "GET",
dataType: 'json',
success: function(res) {
$('#cityPicker').html('<option value="">Select City</option>');
$.each(res.states, function(key, value) {
if (value.state == $('#statePicker').val()) {
console.log(value.districts);
$("#cityPicker").append('<option value="' + value
.districts + '">' + value.districts + '</option>');
}
});
}
});
});
blade
<span>
<select id="statePicker" name="statePicker" required class="form-control"></select>
<select id="cityPicker" name="cityPicker" required class="form-control"></select>
</span>
你的数据结构没问题。问题是您没有创建多个选项元素,您只创建了一个。此部分已关闭:
$("#cityPicker").append('<option value="' + value
.districts + '">' + value.districts + '</option>');
}
你要做的是为每个分区创建一个option元素,如下:
for (const district of value.districts) {
$("#cityPicker").append('<option value="' + district + '">' + district + '</option>');
}
let statePicker = $('#statePicker').val();
let list = $("#cityPicker");
$.each(res.states, function(key, value) {
if (value.state == statePicker) {
$.each(items, function(item) {
list.append(new Option(item, item));
});
}
});
你需要循环 value.districts
因为它是一个数组,而且你正在以一种肮脏的方式进行循环,你在每个循环中初始化 $("#cityPicker")
,这可能会带来一些性能问题未来如果列表项增加。
我在 JSON 文件中有一个 JSON 数组,如下所示:
{
"states": [
{
"state": "Andhra Pradesh",
"districts": [
"Anantapur",
"Chittoor",
"East Godavari",
"Guntur",
"Krishna",
"Kurnool",
"Nellore",
"Prakasam",
"Srikakulam",
"Visakhapatnam",
"Vizianagaram",
"West Godavari",
"YSR Kadapa"]
}
]
}
并且我能够成功地加载 select 元素中的所有状态作为依赖 select 选项 .当我 select 来自 select 元素的状态时,它会填充区域 select 元素中的相关数组。 但不是数组显示单独的选项,而是显示为一个选项:
我应该以不同的格式修改我的 JSON 数组吗?
jquery
$('#statePicker').on('change', function() {
$("#cityPicker").html('');
$.ajax({
url: "{{ asset('json/in-sc-list.json') }}",
type: "GET",
dataType: 'json',
success: function(res) {
$('#cityPicker').html('<option value="">Select City</option>');
$.each(res.states, function(key, value) {
if (value.state == $('#statePicker').val()) {
console.log(value.districts);
$("#cityPicker").append('<option value="' + value
.districts + '">' + value.districts + '</option>');
}
});
}
});
});
blade
<span>
<select id="statePicker" name="statePicker" required class="form-control"></select>
<select id="cityPicker" name="cityPicker" required class="form-control"></select>
</span>
你的数据结构没问题。问题是您没有创建多个选项元素,您只创建了一个。此部分已关闭:
$("#cityPicker").append('<option value="' + value
.districts + '">' + value.districts + '</option>');
}
你要做的是为每个分区创建一个option元素,如下:
for (const district of value.districts) {
$("#cityPicker").append('<option value="' + district + '">' + district + '</option>');
}
let statePicker = $('#statePicker').val();
let list = $("#cityPicker");
$.each(res.states, function(key, value) {
if (value.state == statePicker) {
$.each(items, function(item) {
list.append(new Option(item, item));
});
}
});
你需要循环 value.districts
因为它是一个数组,而且你正在以一种肮脏的方式进行循环,你在每个循环中初始化 $("#cityPicker")
,这可能会带来一些性能问题未来如果列表项增加。