级联菜单

本文章讲述如何写一个省市区关联菜单插件,只是简单的实现,代码有不成熟之处,请自行判断。

1)用户需要自行添加一个div容器并添加样式,封装好省市区数组,然后将容器的Id和数组作为参数传入,如下所示

<style>

    .content{
        width: 500px;
        height: 300px;
        background-color: lightblue;
        margin: 0 auto;
    }
    .content div{
        float: left;
    }

</style>

<div class="content" id="content"></div>
<script src="js/级联菜单.js"></script>
<script>

    function getData(){
        var p1c1Part1=["莱山区","芝罘区","福山区","牟平区","栖霞市"];
        var p1c2Part2=["市南区","市北区","四方区","黄岛区","崂山区","城阳区"];
        var p1City1={name:"烟台市",part:p1c1Part1};
        var p1City2={name:"青岛市",part:p1c2Part2};
        var p1City=[p1City1,p1City2];
        var province1={name:"山东省",city:p1City};
        var p2c1Part1=["沧浪区","平江区","虎丘区","吴中区","吴江市"];
        var p2c2Part2=["云龙区","鼓楼区","九里区","泉山区"];
        var p2City1={name:"苏州市",part:p2c1Part1};
        var p2City2={name:"徐州市",part:p2c2Part2};
        var p2City=[p2City1,p2City2];
        var province2={name:"江苏省",city:p2City};
        var array=[province1,province2];
        return array;
    }
    initMenu(getData(),"content");
</script>


2)下面开始封装js代码,首先需要定义一个初始化方法并获取传入的参数,因为我是利用innerHTML的方式来写入,所以为了避免覆盖,需要将用户传入的容器分区,分成三个小的div。


/**
 * Created by GZN on 2017/8/5.
 */


var array;
var nowCity;

function initMenu(arr,id){
    array=arr;
    var div=document.getElementById(id);
    div.innerHTML=" <div id='left' style='width: 33%;height: 300px;'></div> <div id='center' style='width: 33%;height: 300px;'></div><div id='right' style='width: 33%;height: 300px;'></div>";

//初始化一下省市区。

var leftDiv= document. getElementById( "left"); leftDiv. innerHTML= createSelect( array, true); document. getElementsByTagName( "select")[ 0]. onchange= getCity; getCity( document. getElementsByTagName( "select")[ 0]); getPart( document. getElementsByTagName( "select")[ 1]); }

var nowCity;//将当前城市作为全局变量,方便获取下一级菜单

function getCity(cell){     if(cell==event)cell= cell.target;//判断传入的是事件因子还是对象,都将其转换为对象     var index=cell.selectedIndex-0;//获取被选择的option的下标,并通过减0将其从字符串转化为整型     nowCity=array[index].city;     var centerDiv=document.getElementById("center");     centerDiv.innerHTML=createSelect(nowCity,true);     document.getElementsByTagName("select")[1].onchange=getPart;//给select添加事件 }

function getPart(cell){ if(cell== event)cell= cell. target; var index=cell. selectedIndex- 0; var part= nowCity[ index]. part; var rightDiv= document. getElementById( "right"); rightDiv. innerHTML= createSelect( part, false); }

div添加select标签,通过遍历数组,来获取应该添加的option的数量和值。由于每一个div都需要这个步骤,所以可以将其封装为一个方法,方便调用;

function createSelect(array,flag){     var str=" <select style='width: 80%;margin: 10% 10%;'> ";     for(var i=0;i<array.length;i++){

//flag是为了判断数组里存的是对象还是值,比如第三级菜单的数组里就是一个名字而不是对象         if(flag){             str+=" <option value='"+array[i].name+"'> "+array[i].name+"</option> ";         }         else{             str+=" <option value='"+array[i]+"'> "+array[i]+"</option> ";         }     }     str+="</select> ";     return str; }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值