省市区三级联动通常指的是在前端页面上,通过选择省份来动态加载对应的城市列表,再通过选择城市来动态加载对应的区县列表。这种交互方式常用于地址输入框或者注册页面等场景。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使得JSON成为理想的数据交换语言。
类型:
{"name": "张三", "age": 30}
。[{"id": 1, "name": "北京"}, {"id": 2, "name": "上海"}]
。应用场景:
以下是一个简化的省市区三级联动的JSON数据示例:
{
"provinces": [
{
"id": "1",
"name": "广东省",
"cities": [
{
"id": "101",
"name": "广州市",
"districts": ["天河区", "越秀区", "海珠区"]
},
{
"id": "102",
"name": "深圳市",
"districts": ["福田区", "南山区", "宝安区"]
}
]
},
{
"id": "2",
"name": "湖南省",
"cities": [
{
"id": "201",
"name": "长沙市",
"districts": ["岳麓区", "芙蓉区", "天心区"]
}
]
}
]
}
问题:如何动态加载省市区数据?
解决方法:
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>省市区三级联动</title>
<script>
// 假设上面的JSON数据存储在变量jsonData中
const jsonData = {...}; // 省略具体数据
window.onload = function() {
const provinceSelect = document.getElementById('province');
const citySelect = document.getElementById('city');
const districtSelect = document.getElementById('district');
// 初始化省份列表
jsonData.provinces.forEach(province => {
const option = document.createElement('option');
option.value = province.id;
option.textContent = province.name;
provinceSelect.appendChild(option);
});
// 省份改变事件
provinceSelect.addEventListener('change', function() {
const selectedProvinceId = this.value;
citySelect.innerHTML = '<option value="">请选择城市</option>';
districtSelect.innerHTML = '<option value="">请选择区县</option>';
const selectedProvince = jsonData.provinces.find(p => p.id == selectedProvinceId);
if (selectedProvince) {
selectedProvince.cities.forEach(city => {
const option = document.createElement('option');
option.value = city.id;
option.textContent = city.name;
citySelect.appendChild(option);
});
}
});
// 城市改变事件(类似省份改变事件的逻辑)
// ...
};
</script>
</head>
<body>
<select id="province">请选择省份</select>
<select id="city">请选择城市</select>
<select id="district">请选择区县</select>
</body>
</html>
注意:上述代码仅为示例,实际应用中可能需要考虑更多细节和边界情况。
领取专属 10元无门槛券
手把手带您无忧上云