在日常项目开发阶段经常见到下拉框二级联动效果,尤其是涉及地区、品种等有多级选项时。比如说:常见的省市联动下拉框,在选择省份时,城市列表也会更随改变。
思路:
1,所谓联动效果,是指出发父级的数据变化时,会影响到关联性子级数据元素的变化。
下面是造的省市的数据:
var linkDatas = {
provinces:[
{
\"code\":\"0\",
\"name\":\"请选择\"
},
{
\"code\":\"1\",
\"name\":\"北京\"
},
{
\"code\":\"2\",
\"name\":\"天津\"
},
{
\"code\":\"3\",
\"name\":\"河北\"
},
{
\"code\":\"4\",
\"name\":\"湖北\"
},
{
\"code\":\"5\",
\"name\":\"广东\"
},
{
\"code\":\"6\",
\"name\":\"其他\"
}
],
citys:{
0:[
\"请选择\"
],
1:[
\"朝阳区\",
\"海淀区\",
\"东城区\",
\"西城区\",
\"房山区\",
\"其他\"
],
2:[
\"天津\"
],
3:[
\"沧州\",
\"石家庄\",
\"秦皇岛\",
\"其他\"
],
4:[
\"武汉市\",
\"宜昌市\",
\"襄樊市\",
\"其他\"
],
5:[
\"广州市\",
\"深圳市\",
\"汕头市\",
\"佛山市\",
\"珠海市\",
\"其他\"
],
6:[
\"其他\"
]
}
};
2,根据数据动态生成option节点:
function addOptions(target,options){
var optionEle = null,
target = target,
option = options,
optionLen = options.length;
for(var i = 0;i < optionLen;i++){
optionEle = document.createElement(\'option\');
optionEle.value = option[i].value;
optionEle.text = option[i].text;
target.options.add(optionEle);
}
}
3,根据上述省市数据,其中code代表“省级”指向“城市”的标识符,当省级的数据变更时,出发change事件:
pro.onchange = function(){
console.log(this);
var ct = city[this.value],
ctLen = ct.length,
ctBox = [];
c.innerHTML = \"\";
/*添加城市*/
for(var j = 0;j < ctLen;j++){
ctBox.push({
\"text\" : ct[j],
\"value\": ct[j]
});
}
addOptions(c,ctBox);
}
HTML代码:
<div class=\"content\"> <h3>下拉框联动效果</h3> <p>省份: <select name=\"provinces\" id=\"provinces\"> </select> </p> <p> 市: <select name=\"citys\" id=\"citys\"> </select> </p> </div>
全部JavaScript代码:
var linkDatas = {
provinces:[
{
\"code\":\"0\",
\"name\":\"请选择\"
},
{
\"code\":\"1\",
\"name\":\"北京\"
},
{
\"code\":\"2\",
\"name\":\"天津\"
},
{
\"code\":\"3\",
\"name\":\"河北\"
},
{
\"code\":\"4\",
\"name\":\"湖北\"
},
{
\"code\":\"5\",
\"name\":\"广东\"
},
{
\"code\":\"6\",
\"name\":\"其他\"
}
],
citys:{
0:[
\"请选择\"
],
1:[
\"朝阳区\",
\"海淀区\",
\"东城区\",
\"西城区\",
\"房山区\",
\"其他\"
],
2:[
\"天津\"
],
3:[
\"沧州\",
\"石家庄\",
\"秦皇岛\",
\"其他\"
],
4:[
\"武汉市\",
\"宜昌市\",
\"襄樊市\",
\"其他\"
],
5:[
\"广州市\",
\"深圳市\",
\"汕头市\",
\"佛山市\",
\"珠海市\",
\"其他\"
],
6:[
\"其他\"
]
}
};
function addOptions(target,options){
var optionEle = null,
target = target,
option = options,
optionLen = options.length;
for(var i = 0;i < optionLen;i++){
optionEle = document.createElement(\'option\');
optionEle.value = option[i].value;
optionEle.text = option[i].text;
target.options.add(optionEle);
}
}
function provincesCitysLink(pro,c){
var LD = linkDatas,
provinces = LD.provinces,
city = LD.citys,
initCity = city[0],
proBox = [];
/*添加省份*/
for(var i = 0;i < provinces.length;i++){
proBox.push({
\"text\" : provinces[i].name,
\"value\": provinces[i].code
})
}
addOptions(pro,proBox);
/*初始化城市*/
addOptions(c,[{
\"text\" : initCity,
\"value\": initCity
}]);
/*添加联动事件*/
pro.onchange = function(){
console.log(this);
var ct = city[this.value],
ctLen = ct.length,
ctBox = [];
c.innerHTML = \"\";
/*添加城市*/
for(var j = 0;j < ctLen;j++){
ctBox.push({
\"text\" : ct[j],
\"value\": ct[j]
});
}
addOptions(c,ctBox);
}
}
var provinces = document.getElementById(\'provinces\'),
citys = document.getElementById(\'citys\');
provincesCitysLink(provinces,citys);
本文地址:https://www.stayed.cn/item/8332
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我