使用mobiscroll实现级联效果

本来要使用微信的jqueryweui picker插件。因为一些限制。

百度了一下午,看到了mobiscroll。 因为新版是收费的,所以这里用 2.13.2版本


首先看一下效果实现后的






1、引入mobiscroll文件

<link rel="stylesheet" href="../resources/plugins/mobiscroll/mobiscroll-2.13.2.full.min.css" />
<script type="text/javascript" src="../resources/plugins/mobiscroll/mobiscroll-2.13.2.full.min.js"></script>





2、准备data.js 数据(这里从数据库读取出来,转成的JSON)


数据格式如下:

 [
    {
        "code": "110000",
        "name": "北京市",
        "sub": [
            {
                "code": "110100",
                "name": "市辖区",
                "sub": [
                    {
                        "code": "110101",
                        "name": "东城区"
                    },
                    {
                        "code": "110102",
                        "name": "西城区"
                    },
                    {
                        "code": "110105",
                        "name": "朝阳区"
                    },
                    {
                        "code": "110106",
                        "name": "丰台区"
                    },
                    {
                        "code": "110107",
                        "name": "石景山区"
                    },
                    {
                        "code": "110108",
                        "name": "海淀区"
                    },
                    {
                        "code": "110109",
                        "name": "门头沟区"
                    },
                    {
                        "code": "110111",
                        "name": "房山区"
                    },
                    {
                        "code": "110112",
                        "name": "通州区"
                    },
                    {
                        "code": "110113",
                        "name": "顺义区"
                    },
                    {
                        "code": "110114",
                        "name": "昌平区"
                    },
                    {
                        "code": "110115",
                        "name": "大兴区"
                    },
                    {
                        "code": "110116",
                        "name": "怀柔区"
                    },
                    {
                        "code": "110117",
                        "name": "平谷区"
                    }
                ]
            },
            {
                "code": "110200",
                "name": "县",
                "sub": [
                    {
                        "code": "110228",
                        "name": "密云县"
                    },
                    {
                        "code": "110229",
                        "name": "延庆县"
                    }
                ]
            }
        ]
    },
    {
        "code": "120000",
        "name": "天津市",
        "sub": [
            {
                "code": "120100",
                "name": "市辖区",
                "sub": [
                    {
                        "code": "120101",
                        "name": "和平区"
                    },
                    {
                        "code": "120102",
                        "name": "河东区"
                    },
                    {
                        "code": "120103",
                        "name": "河西区"
                    },
                    {
                        "code": "120104",
                        "name": "南开区"
                    },
                    {
                        "code": "120105",
                        "name": "河北区"
                    },
                    {
                        "code": "120106",
                        "name": "红桥区"
                    },
                    {
                        "code": "120110",
                        "name": "东丽区"
                    },
                    {
                        "code": "120111",
                        "name": "西青区"
                    },
                    {
                        "code": "120112",
                        "name": "津南区"
                    },
                    {
                        "code": "120113",
                        "name": "北辰区"
                    },
                    {
                        "code": "120114",
                        "name": "武清区"
                    },
                    {
                        "code": "120115",
                        "name": "宝坻区"
                    },
                    {
                        "code": "120116",
                        "name": "滨海新区"
                    },
                    {
                        "code": "120117",
                        "name": "宁河区"
                    },
                    {
                        "code": "120118",
                        "name": "静海区"
                    }
                ]
            },
            {
                "code": "120200",
                "name": "县",
                "sub": [
                    {
                        "code": "120225",
                        "name": "蓟县"
                    }
                ]
            }
        ]
    },


3、html代码


<input type="hidden" id="provinceId" name="provinceId" value="$!compShopInfo.provinceId" >
<input type="hidden" id="cityId" name="cityId" value="$!compShopInfo.cityId">
<input type="hidden" id="areaId" name="areaId" value="$!compShopInfo.areaId">
<input class="weui-input" type="text" placeholder="请填写" id="Addr" >
<ul id="AddrMobiscroll" style="display: none"></ul>


3个隐藏域用于保存一会要提交到后端的值 ($!  是velocity表达式,没用过的小伙伴请忽略。设置默认值的)

Addr用于点击弹出弹层

AddrMobiscroll 就是级联的弹层,稍后用JS读取JSON进行装载



4、JS代码


使用 veloctiy 进行初始化 用于 update进入表单时的数据回填


var ProvinceId = '$!compShopInfo.provinceId';
var CityId = "$!compShopInfo.cityId";
var AreaId = "$!compShopInfo.areaId";



  //初始化经营地址
        function initAddrJsons(){

            //初始化选中的值 - 》 回显示文本框
            var ProvinceIdStr = "";
            var CityIdStr     = "";
            var AreaIdStr     = "";

            //初始化插件默认选中
            var ProvinceIdIndex    = "";
            var CityIdIndex     = "";
            var AreaIdIndex     = "";

            //初始化选中隐藏的value -》 提交时使用
            var ProvinceIdVal    = "";
            var CityIdVal     = "";
            var AreaIdVal     = "";

            var KHHtml = "";
            //省份
            for(var i = 0; i < addrCode.length; i++){
                var code = addrCode[i].code;
                var name = addrCode[i].name;

                //初始化选中值
                if(ProvinceId == code){
                    ProvinceIdStr = name;
                    ProvinceIdIndex = i;
                    ProvinceIdVal = code;
                }

                KHHtml +="<li>";
                KHHtml +='<div data-value="'+ code +'">'+ name +'</div>';
                KHHtml +='<ul>';


                //城市
                for(var j = 0; j < addrCode[i].sub.length; j++) {
                    var subCode = addrCode[i].sub[j].code;
                    var subName = addrCode[i].sub[j].name;

                    //初始化选中值
                    if(CityId == subCode){
                        CityIdStr = subName;
                        CityIdIndex= j;
                        CityIdVal = subCode;
                    }

                    KHHtml +='<li>';
                    KHHtml +='<div data-value="'+ subCode +'">'+ subName +'</div>';
                    KHHtml +='<ul>';

                        //区
                        for(var k = 0; k < addrCode[i].sub[j].sub.length; k++) {
                            var subSubCode = addrCode[i].sub[j].sub[k].code;
                            var subSubName = addrCode[i].sub[j].sub[k].name;

                            //初始化选中值
                            if(AreaId == subSubCode){
                                AreaIdStr = subSubName;
                                AreaIdIndex= k;
                                AreaIdVal = subSubCode;
                            }

                            KHHtml +='<li data-value="'+ subSubCode  +'">'+ subSubName +'</li>';
                        }

                    KHHtml +='</ul>';
                    KHHtml += '</li>';
                }

                KHHtml +='</ul>';
                KHHtml +='</li>';
            }


            if(ProvinceIdStr == "" && CityIdStr == "" && AreaIdStr == "" ){
                ProvinceIdStr = addrCode[0].name;
                CityIdStr = addrCode[0].sub[0].name;
                AreaIdStr = addrCode[0].sub[0].sub[0].name;

                ProvinceIdIndex = 0;
                CityIdIndex = 0;
                AreaIdIndex = 0;

                ProvinceIdVal = addrCode[0].code;
                CityIdVal = addrCode[0].sub[0].code;
                AreaIdVal = addrCode[0].sub[0].sub[0].code;
            }

            //初始化选中值
            $("#Addr").val(ProvinceIdStr + " " + CityIdStr + " " + AreaIdStr);
            $("#provinceId").val(ProvinceIdVal);
            $("#cityId").val(CityIdVal);
            $("#areaId").val(AreaIdVal);

            //初始化插件所需html
            $("#AddrMobiscroll").append(KHHtml);
            //初始化插件
            $("#AddrMobiscroll").mobiscroll().treelist({
                theme: "ios-ics",
                lang: "zh",
                display: 'bottom',
                inputClass: 'tmp',
                headerText: '请您选择',
                defaultValue: [ProvinceIdIndex,CityIdIndex,AreaIdIndex],
                onSelect: function (valueText, inst) {

//                    console.log("1--"+valueText);

                    var n = valueText.split(' ');

                    var m1 = $(this).children("li").eq(n[0]).find("div").html();
                    var m1_id = $(this).children("li").eq(n[0]).find("div").attr("data-value");

                    var m2 = $(this).children("li").eq(n[0]).children("ul").find("div").eq(n[1]).html();
                    var m2_id = $(this).children("li").eq(n[0]).children("ul").find("div").eq(n[1]).attr("data-value");

                    var m3 =$(this).children("li").eq(n[0]).children("ul").children("li").eq(n[1]).children("ul").children("li").eq(n[2]).html();
                    var m3_id = $(this).children("li").eq(n[0]).children("ul").children("li").eq(n[1]).children("ul").children("li").eq(n[2]).attr("data-value");

//                    console.log("1-name-"+m1);
//                    console.log("2-name-"+m2);
//                    console.log("3-name-"+m3);
//
//                    console.log("1-val-"+m1_id);
//                    console.log("2-val-"+m2_id);
//                    console.log("3-val-"+m3_id);

                    //选中后进行赋值
                    $("#Addr").val(m1 + " " + m2 + " " + m3);
                    $("#provinceId").val(m1_id);
                    $("#cityId").val(m2_id);
                    $("#areaId").val(m3_id);

                }
            });
            //隐藏插件自己生成的文本框
            $("#AddrMobiscroll_dummy").css('display','none');
            //初始化点击事件
            $("#Addr").click(function () {
                $("input[id^=AddrMobiscroll]").click();
            });
        }



5、使用JQ初始化一下就可以啦

 jQuery(function () {
            //初始化经营地址级联插件
            initAddrJsons();
});



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值