实现省市区的下拉列表联动需要用到前端技术来实现,其中JS和AJAX是最常用的两个技术,下面分步骤讲解完整的攻略。
- 设计HTML页面
HTML页面需要先设计好相应的下拉列表框架,如省份、城市、区域等。在省份下拉列表中,需要写入完整的省份列表;在城市和区域的下拉列表中只需预留一个框架。
以下是一个简单的HTML页面设计示例:
<!DOCTYPE html>
<html>
<head>
<title>省市区下拉列表</title>
</head>
<body>
<div>
<label>请选择省份:</label>
<select id="province">
<option value="">请选择省份</option>
<option value="一级省份1">一级省份1</option>
<option value="一级省份2">一级省份2</option>
<option value="一级省份3">一级省份3</option>
<option value="一级省份4">一级省份4</option>
</select>
</div>
<div>
<label>请选择城市:</label>
<select id="city">
<option value="">请选择城市</option>
</select>
</div>
<div>
<label>请选择区域:</label>
<select id="town">
<option value="">请选择区域</option>
</select>
</div>
</body>
</html>
- 编码JS逻辑
编写JS代码来实现省市区的下拉列表联动,可以通过AJAX获取JSON文件中的省份、城市和区域数据,然后根据用户所选择的省份来自动填充相应的城市和区域。
以下是一个基本的JS联动示例:
<script>
var provinceList = ["一级省份1","一级省份2","一级省份3","一级省份4"];
var cityList = {
"一级省份1" : ["城市1-1","城市1-2","城市1-3"],
"一级省份2" : ["城市2-1","城市2-2","城市2-3"],
"一级省份3" : ["城市3-1","城市3-2","城市3-3"],
"一级省份4" : ["城市4-1","城市4-2","城市4-3"]
};
var townList = {
"城市1-1" : ["区域1-1-1","区域1-1-2","区域1-1-3"],
"城市1-2" : ["区域1-2-1","区域1-2-2","区域1-2-3"],
"城市1-3" : ["区域1-3-1","区域1-3-2","区域1-3-3"],
"城市2-1" : ["区域2-1-1","区域2-1-2","区域2-1-3"],
"城市2-2" : ["区域2-2-1","区域2-2-2","区域2-2-3"],
"城市2-3" : ["区域2-3-1","区域2-3-2","区域2-3-3"],
"城市3-1" : ["区域3-1-1","区域3-1-2","区域3-1-3"],
"城市3-2" : ["区域3-2-1","区域3-2-2","区域3-2-3"],
"城市3-3" : ["区域3-3-1","区域3-3-2","区域3-3-3"],
"城市4-1" : ["区域4-1-1","区域4-1-2","区域4-1-3"],
"城市4-2" : ["区域4-2-1","区域4-2-2","区域4-2-3"],
"城市4-3" : ["区域4-3-1","区域4-3-2","区域4-3-3"]
};
var province = document.getElementById("province");
var city = document.getElementById("city");
var town = document.getElementById("town");
for(var i=0; i<provinceList.length; i++){
var op = new Option();
op.value = provinceList[i];
op.text = provinceList[i];
province.options.add(op);
}
province.onchange = function(){
var select_province = this.options[this.selectedIndex].value;
city.options.length = 0;
var cityData = cityList[select_province];
if(cityData){
for(var j=0; j<cityData.length; j++){
var op = new Option();
op.value = cityData[j];
op.text = cityData[j];
city.options.add(op);
}
}
town.options.length = 0;
var townData = townList[city.value];
if(townData){
for(var k=0; k<townData.length; k++){
var op = new Option();
op.value = townData[k];
op.text = townData[k];
town.options.add(op);
}
}
};
city.onchange = function(){
town.options.length = 0;
var townData = townList[this.value];
if(townData){
for(var k=0; k<townData.length; k++){
var op = new Option();
op.value = townData[k];
op.text = townData[k];
town.options.add(op);
}
}
};
</script>
示例说明1:
该JS代码示例中,首先定义了三个列表数组,分别为省份列表、城市列表和区域列表。然后通过循环遍历将省份列表写入省份下拉列表框,并为省份下拉列表框绑定了一个onchange事件,用于切换城市和区域列表。接着在省份下拉列表框的onchange事件中,根据选择的省份加载相应的城市列表,在城市列表框选择城市后同样根据城市名自动加载对应的区域列表。所有列表数据均在JS代码中进行定义,不通过AJAX加载。
示例说明2:
如果需要通过AJAX动态获取省份、城市和区域数据,可以参考下面的示例代码:
<script>
function getProvinceData(){
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("GET", "province.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
for(var i=0; i<data.length; i++){
var op = new Option();
op.value = data[i].name;
op.text = data[i].name;
province.options.add(op);
}
}
};
xhr.send(null);
}
function getCityData(provinceName){
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("GET", "city.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
city.options.length = 0;
var cityData = data[provinceName];
if(cityData){
for(var j=0; j<cityData.length; j++){
var op = new Option();
op.value = cityData[j].name;
op.text = cityData[j].name;
city.options.add(op);
}
}
}
};
xhr.send(null);
}
function getTownData(cityName){
var xhr;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("GET", "town.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
town.options.length = 0;
var townData = data[cityName];
if(townData){
for(var k=0; k<townData.length; k++){
var op = new Option();
op.value = townData[k];
op.text = townData[k];
town.options.add(op);
}
}
}
};
xhr.send(null);
}
var province = document.getElementById("province");
var city = document.getElementById("city");
var town = document.getElementById("town");
getProvinceData();
province.onchange = function(){
var select_province = this.options[this.selectedIndex].value;
getCityData(select_province);
};
city.onchange = function(){
getTownData(this.value);
};
</script>
示例说明:
该JS代码示例中,首先定义三个和AJAX请求相关的方法,分别用于获取省份、城市和区域的JSON数据。然后在省份下拉列表框的onchange事件中调用获取城市数据的方法,根据选择的省份自动加载相应的城市列表,同时为城市下拉列表框绑定onchange事件,用于切换区域列表。在城市下拉列表框的onchange事件中调用获取区域数据的方法,根据选择的城市自动加载对应的区域列表。所有数据均以JSON格式保存在对应的文件中,并通过AJAX异步请求获取。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+AJAX实现省市区的下拉列表联动 - Python技术站