运行代码后北京的市区可以正常显示,但切换省份之后,市区就一直为空了,为什么?

运行代码后北京的市区可以正常显示,但切换省份之后,市区就一直为空了,为什么?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
<title>Document</title>
    <script type="text/javascript" src="index.js"></script>
</head>
<body onload="address()">
<form>
省份:
<!--  请在此补充代码 -->
<select id="province" onchange="linkage()"></select>
市/区:
<!--  请在此补充代码 -->
<select id="city"></select>
</form>
</body>
</html>

function address(){
    	/*请在此补充代码*/ 
    	var province = document.getElementById("province");
        var city = document.getElementById("city");
        var provinceArray = ["北京市", "天津市", "河北省", "河南省"];
        var cityArray = ["朝阳区","西城区"];
        selectAdd(province,provinceArray);
        selectAdd(city,cityArray);
}
function selectAdd(obj,value){
		/*请在此补充代码*/ 
		for(var i=0;i<value.length;i++){
		    obj.options.add(new Option(value[i],i));
		}
}
function linkage(){
	/*请在此补充代码*/
	var province = document.getElementById("province");
    var city = document.getElementById("city");
    var pv= province.value;
    var cityArray;
    switch(pv){
        case "北京市":
            cityArray = ["朝阳区","西城区"];
            break;
        case "天津市":
            cityArray = ["西青区","武清区"];
            break;
        case "河北省":
            cityArray = ["石家庄","邯郸市"];
            break;
        case "河南省":
            cityArray = ["郑州市","开封市"];
            break;
    }
    city.options.length=0;
    selectAdd(city,cityArray);
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,1、首先使用switch语句,切换市区后,就报错了,例如:

http://img1.sycdn.imooc.com//climg/5d8f0ecd09b697ac07360106.jpg这个错误是无法读取length属性,这是因为在switch语句中没有与case相匹配的内容,cityArray为空,所以获取到它的length属性就是一个undefined.

2、原因如下:new Option()表示一条具体的条目,里面的参数一个表示在页面中显示的具体内容,一个表示的是它的值,比如:以这个标签为例<option value="123">abc</option>,第一个参数是要显示的内容,也就是这里的abc,第二个标签是value的值。

在同学的代码中obj.options.add(new Option(value[i],i));-->第一个参数是要展示到页面的具体内容,比如:北京市、天津市等,第二个参数是value的值,对应就是i的值,value对应为0、1、2.

所以在switch语句中value的值,也就是pv的值与"北京市"、"天津市"比较,条件不成立,cityArray为空,所以不能执行下去,修改建议如下:

http://img1.sycdn.imooc.com//climg/5d8f1284097e414f07210150.jpg

如上value就可以与"北京市"、"天津市"比较啦。

同学将switch语句换成if语句,一样的错误,条件不成立,cityArray为空,不能继续执行下去。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 敏捷丶 提问者 #1
    1、所以如果将case的内容改成0,1,2,3也可以进行比较吗? 2、然后这里value的值,0123是什么类型?
    2019-09-28 16:10:04
  • 好帮手慕小班 回复 提问者 敏捷丶 #2
    同学你好,1、这里将case的内容换成0,1,2,3也是可以的。2、这里0、1、2、3这样的value值,在js中是number类型的数据,可以直接比较呐。 如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-09-28 17:19:19
提问者 敏捷丶 2019-09-28 11:03:40

用if语句可以实现,感觉效果是相同的呀,switch语句是哪里出错了嘛

if(pv=="北京市"){
    	cityArray = ["朝阳区","西城区"];
    }else if (pv=="天津市") {
    	cityArray = ["西青区","武清区"];
    }else if (pv=="河北省") {
    	cityArray = ["石家庄","邯郸市"];
    }else{
    	cityArray = ["郑州市","开封市"];
    }


  • 提问者 敏捷丶 #1
    也出错了,切换之后就一直是河南省的市区
    2019-09-28 11:10:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师