Bootstrap-select 的地址联动

地址数据来自于数据库(业务需要,地址可修改),数据库的设计:

 

QQ截图20151204151727

其中pid为父节点id,lft,rgt为当前节点的子节的id范围。

数据形式:

{"area":[{"id":366,"name":"北京","pid":1,"lft":2,"rgt":5},
{"id":386,"name":"天津","pid":1,"lft":6,"rgt":9},
{"id":406,"name":"河北","pid":1,"lft":10,"rgt":35},
{"id":568,"name":"山西","pid":1,"lft":36,"rgt":59},
{"id":1121,"name":"浙江","pid":1,"lft":196,"rgt":219},
{"id":1208,"name":"安徽","pid":1,"lft":220,"rgt":255},
{"id":1303,"name":"福建","pid":1,"lft":256,"rgt":275},
{"id":1383,"name":"江西","pid":1,"lft":276,"rgt":299},
{"id":1485,"name":"山东","pid":1,"lft":300,"rgt":335},
{"id":1612,"name":"河南","pid":1,"lft":336,"rgt":371},
{"id":1760,"name":"湖北","pid":1,"lft":372,"rgt":409},
{"id":1851,"name":"湖南","pid":1,"lft":410,"rgt":439},
{"id":3019,"name":"新疆","pid":1,"lft":758,"rgt":791},
{"id":3268,"name":"重庆","pid":1,"lft":792,"rgt":795}]}

效果:

image

image

引用文件:jquery-1.11.3.js,Bootstrap3.35,Bootstrap-select1.7.2

http://jquery.com

下载:http://code.jquery.com/jquery-1.11.3.js

http://v3.bootcss.com/getting-started

下载:http://d.bootcss.com/bootstrap-3.3.5-dist.zip

http://silviomoreto.github.io/bootstrap-select/

下载:https://codeload.github.com/silviomoreto/bootstrap-select/legacy.zip/v1.7.2

页面:

<body>
    <div class="container">
        <div id="areaSelect"></div>
    </div>

</body>

js:

<script>
    $(function (){
        /**
         * 地址数据,json形式
         */
        var areaData;

        var AREA_CHINA = 1;
        // 首节点为'中国'
        createSelect(AREA_CHINA);

        /**
         * 根据地址父节点id获取地址子节点数据,
         * 并将option增加到最后一个select中
         * @param pid 地址父节点id
         * @author ShiheHuang
         */
        function createSelect(pid){
            // 根据parentId获得下一级的area json 数据
            areaData = getAreaJson(pid);
            // 延时500ms增加option选项。需要延时,否则areaData取不到值(post)
            setTimeout(appendSelect, 500);
        }

        /**
         * 根据地址父节点id,从服务器中获取下一级地址
         * 将json结果返回到areaData中,(无效地址id为0)
         * @param pid
         * @author ShiheHuang
         */
        function getAreaJson(pid){
            $.post("${pageContext.request.contextPath}/rest/area/getArea?pid="+pid,
                {},
                function(reslut){
//                    console.info("length::"+reslut.area.length);
                    if(reslut.area.length > 0){
                        areaData = reslut.area;
                    }else{
                        areaData = null;
                    }
                },"json"
            );
        }

        /**
         * append select,id加1(select节点总数)
         * @author ShiheHuang
         */
        function appendSelect(){
            if(areaData == null){
                return;
            }
            var num = $(".selectpicker").size();
            $("#areaSelect").append("<select class='selectpicker' id='area"+num+"' data-live-search='true'" +
            " style='display:none;' data-width='auto' data-size='5'><option value='0'></option></select>");
            // 绑定改变事件,(同一个节点,不要重复绑定!)
            $("#area"+num).on('change', onSelectChange);
            // render
            $('.selectpicker').selectpicker('render');
            appendOption();
        }

        /**
         * append option 到最后一个select中
         * @author ShiheHuang
         */
        function appendOption(){
            var num = $(".selectpicker").size()-1;
            for(var i in areaData){
                $("#area"+num).append("<option value='"+areaData[i].id+"'>"+areaData[i].name+"</option>");
            }
            // 新生成的option节点,需要刷新,才能显示
            $('.selectpicker').selectpicker('refresh');
        }

        /**
         * 为select绑定事件
         * @author ShiheHuang
         */
        function onSelectChange(){
            // console.info("value::"+$(this).val());
            // select由两部分组成,一个select,另外属于该select的div.btn-group bootstrap-select
            // 当前select发生改变时,去除所有下一级的select
            $(this).next().nextAll().remove();
            // 当前select值大于0(有效值),则create select,id加1(select节点总数),并根据当前select值查找下一级的数据
            if($(this).val() > 0){
                createSelect($(this).val());
            }
        }
    });

</script>

转载于:https://my.oschina.net/htzy/blog/539417

您好!对于Bootstrap-select.js分组联动的实现,您可以按照以下步骤进行操作: 1. 引入必要的依赖文件:在HTML文件中引入Bootstrap-select.js和Bootstrap-select.css文件。 ```html <link rel="stylesheet" href="path/to/bootstrap-select.css"> <script src="path/to/bootstrap-select.js"></script> ``` 2. 创建下拉菜单的HTML结构:使用`<select>`元素创建下拉菜单,并为其添加`data-live-search="true"`和`data-size="5"`属性,以启用搜索和设置可见选项的数量。 ```html <select class="selectpicker" data-live-search="true" data-size="5"> <option value="">请选择</option> <optgroup label="分组1"> <option value="1">选项1</option> <option value="2">选项2</option> </optgroup> <optgroup label="分组2"> <option value="3">选项3</option> <option value="4">选项4</option> </optgroup> </select> ``` 3. 初始化插件:在页面加载完成后,通过JavaScript代码初始化Bootstrap-select插件。 ```javascript $(document).ready(function() { $('.selectpicker').selectpicker(); }); ``` 4. 实现分组联动效果:根据您的需求,您可以使用JavaScript代码来实现下拉菜单的分组联动效果。例如,当选择某个选项时,根据该选项的值动态改变其他下拉菜单的选项。 ```javascript $('.selectpicker').on('changed.bs.select', function(e) { var selectedValue = $(this).val(); // 根据选中的值进行相应的处理 }); ``` 这样,您就可以使用Bootstrap-select.js实现分组联动的下拉菜单了。记得根据您的实际需求进行相应的调整和处理。希望对您有帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值