作业 7-8
来源:7-8 编程练习
jia_蛙
2019-10-12 09:26:10
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>省市二级联动</title> <script type="text/javascript" src="index3.js"></script> </head> <!-- onload:页面加载时会触发 优先于body内容的加载 --> <body onload="address()"> 省份: <!-- onchange:改变事件,当下拉框改变时,就会执行 linkage()函数 --> <select name="province" id="province" onchange="linkage()"></select> 市/区: <select name="downtown" id="downtown" onchange="linkage()"></select> </body> </html>
function address(){
//分别获取id为 province、downtown的省市对象
var province = document.getElementById("province");
// 定义省份和市区数组
var provinces = ["北京市","天津市","河北省","河南省"];
selectAdd(province,provinces);
//linkage();
//地区省份较多的情况下 我们应该让最中间的市区显示出来
var avg = province.length;
province.selectedIndex = Math.round(avg/2);
//应该在设置完默认值之后再调用联动方法,否则会出现默认省份与市区不对应
linkage();
}
// 给表单元素赋值,传递四个参数:表单元素对象 、省份市区数组
function selectAdd(obj,pdArray){
/*请在此补充代码*/
for(var i=0;i<pdArray.length;i++){
//给obj表单元素添加一个Option条目
obj.options.add(new Option(pdArray[i],pdArray[i]));
}
}
function linkage(){
/*请在此补充代码*/
var province = document.getElementById("province");
var downtown = document.getElementById("downtown");
var provinceName = province.value;
var downtowns = [["朝阳市","西城区"],["西青区","武清区"],
["石家庄","邯郸市"],["郑州市","开封市"]];
switch(provinceName){
case "北京市":
//把市级内容删除 然后重新设置
downtown.options.length=0;
selectAdd(downtown,downtowns[0]);
break;
case "天津市":
downtown.options.length=0;
selectAdd(downtown,downtowns[1]);
break;
case "河北省":
downtown.options.length=0;
selectAdd(downtown,downtowns[2]);
break;
case "河南省":
downtown.options.length=0;
selectAdd(downtown,downtowns[3]);
break;
}
}老师 我这里function selectAdd(obj,name,value){ 只用到了两个参数 因为我的name 和value都是值一样,所以我就改成数组,我这样可以吗 ?
还有如果我想按照 function selectAdd(obj,name,value){ } 这样改怎么修改?
还麻烦老师看一下 我的注释 有没有需要错误的 哪里还可以优化的。 谢谢1回答
你好!如下图所示,关于你的第一个问题,用到两个参数是可以的。
关于第二个问题,如果要使用三个参数,那么在selectAdd()方法中因为传输的数据不是数组,而是数组元素的值,因此就不用循环了。但是在case语句后面调用selectAdd()方法时就要加循环了。建议还是你现在这么使用,不用修改了。

其他地方没什么问题,代码是符合练习要求的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!