城市三级联动

想必大家都在各种网站上都注册过账号,在填写户籍那一栏的时候,前面选择的不同后面的选项也不同,用的下拉框就属于三级联动,这个主要考察的是DOM里的内容,这个的难点主要有两点,第一就是整理所有的城市,我这里有个整理好的js文件就直接拿来用了,大致就是这样的
这里没有描述
这里没有描述
这个没有什么技术含量就是有点麻烦,第二就是其中父子层级的关系,这个如果出错就很容易出现拿不到所选省市的城市,或者出现拿错的情况。下面直接看代码
因为比较简单就直接把js写一起了

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="city-data.js"></script>
	</head>
	<body>
		省:<select id="provice">
			<option>--请选择--</option>
		</select>
		市:<select id="city">
			<option>--请选择--</option>
		</select>
		区:<select id="area">
			<option>--请选择--</option>
		</select>
		<script>
			var provice = document.getElementById("provice");
			var city1 = document.getElementById("city");
			var area = document.getElementById("area");
			var children;
			var data = city[0];
			for(var i in data){
				//实例化,data[i].name为文本值,i为value值
				var option = new Option(data[i].name,i);
				provice.appendChild(option)
			}
			provice.onchange = function(){
				//城市选择的长度变为1个
				city1.options.length = 1;
				//把当前省份的值提取出来
				var int1 = this.value;
				//把市拿出来
				children = data[int1].child;
				for(var j in children){
					var cityoption = new Option(children[j].name,j);
					city1.appendChild(cityoption);
				}
			}
			city1.onchange = function(){
				area.options.length = 1;
				var int2 = this.value;
				children = data[provice.value].child[int2].child;
				for(var j in children){
					var areaoption = new Option(children[j]);
					area.appendChild(areaoption);
				}
			}
			

		</script>
	</body>
</html>

我当时在写的时候遇到了一个问题就是在获取第一遍之后再重新获取省的时候就会报错,会显示找不到child,后来找了好久才发现是在city1中给children赋值的时候找错了子层,如果你也遇到了这个bug可以仔细检查一下是不是点错了子层。我从中吸取到的教训希望也可以帮到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值