好久没有自己更新文章了,一直转载大佬们的文章。
上周休息由于劳累,然后一觉睡到晚上了,醒来之后,把家里打扫了打扫。把衣服洗了洗,然后又开始睡了。不要问我,问我就是睡觉真舒服,哈哈哈,回归正题。今天我们用js制作一个省级地区三级联动,省市区,这三个由大到小,自动更新后面市区,简单来说就是我选择了省,他会自动选定市和区两部分。在web开发中,地区联动是很常见的功能,在我们购物填写地址的时候,在买外卖的时候,我们都很常见到。今天上午我去打了第三针疫苗,然后我之前用的河北健康码,现在得用健康陕西,填写信息的时候就用到这个三级联动了,所以今天写一篇这样的文章,一个是缘分,另一个就是巩固学习。大家都知道,代码这个东西,一天不打手就生。我们用js制作地区三级联动,得先编写html里面的下拉列表:
<!-- 微信公众号:她的码农 -->
<select id="sheng">
<option value="-1">请选择</option>
</select>
<select id="shi"></select>
<select id="qu"></select>
<script>
<!-- 编写js代码 -->
</script>
大家很好奇就是option里面的value值为什么是-1。因为option是下拉列表里面的选择项,里面的value就是对应地区数组下标,数组下标是从0开始,我们从-1开始,就可以避免将其锁定为某个地区。
接下来我们要制作的就是利用数组保留地区数据。
<script>
// 微信公众号:她的码农
// 省份数组
var shengArr=['陕西','河北'];
// 市数组
var shiArr=[ ['西安市','宝鸡市'],
['石家庄市','邢台市']
];
// 区数组
var quArr=[ [ ['雁塔区','莲湖区'],
['渭滨区','陈仓区','金台区']
],[ ['桥西区','长安区'],
['桥东区','桥西区']
]
];
</script>
编写数组的时候还搜了搜区,大家一看我这就知道我(这娃,地理是真不行,哈哈哈)。
在前面我们利用shengArr这个一维数组,保存了省的数据。后面的市和区我们利用shiArr二维数组保存了省区对应下的市,同理quArr就用到了三维数组。我们举个例子。比如陕西shengArr【1】保存的是陕西省下面所有的城市。接下来我们要做的就是让它自动创建省份下拉菜单:
function createOption(obj,data){
for(var i in data){
var op=new Option(data[i],i);
// 创建下拉菜单中的option
obj.options.add(op);
// 将获取到的选项添加到下拉菜单中
}
}
var sheng=document.getElementById('sheng');
// 获取省份元素
createOption(sheng,shengArr);
我们用createoption()
函数创建指定的下拉菜单选项。参数obj用于表示下拉列表菜单的元素对象,参数data
用于表示一维数组保存的下拉列表选项。我们的new用于实例化option对象创建<select>
下的<option>
选项,后面options
对象的add()
方法将创建的<option>
选项添加到指定的下拉菜单obj中。
我们现在做的可以直接选择省份了,但是还不能实现三级联动。我们想要的是,选择完省份城市地区都出来了。
接下来我们要实现城市的自动选项。当我们选择完省份,自动出现城市区域。
// 微信公众号:她的码农
var shi=document.getElementById('shi');
// 获取市的下拉菜单元素对象
// 下面为省份下拉菜单事件
sheng.onchange=function(){
shi.options.length=0;
// clear城市下的所有原有的option
createOption(shi,shiArr[sheng.value]);
};
我们看了之后还是不能实现三级联动,只有我们选择了省会触发事件,可以直接出现城市,但是城市内的区还是没有显示,我们先遍历一下数组,给城市添加事件再试一下。
var qu=document.getElementById('qu');
// 通过id获取城市下的区域
shi.onchange=function(){
// 添加事件
qu.options.length=0;
// clear区域原有的option
createOption(qu,quArr[sheng.value][shi.value]);
};
这样的话,我们选择省份触发事件出现城市,但是我们不改变城市他是不会出现城市下的区域,我们怎么办呢?
所以我们上面的代码还是有一些错误,我们需要改一改。我们修改一下省份的事件给他来一个判断。
if(sheng.value>=0){
shi.onchange();
// 自动添加城市对应下的区域
}else{
qu.options.length=0;
// clear区域下原有的option
}
接下来我们利用css给他简单美化一下就可以了。
总结:今天制作省份地区的三级联动,主要掌握html里面的下拉列表select和列表项option。还需要掌握一维数组,二维数组,还有遍历数组,获取id,实例化对象,添加change事件,clear(清除)option等。