zoukankan      html  css  js  c++  java
  • 基于jq+layui 编写省/市/区三级联动组件

    <!-- 只需要引入该模块 -->
    <div class="layui-form">
       <div class="layui-form-item" id="select">
         <div class="layui-inline layui-form-select">
            <label class="layui-form-label">地区选择:</label>
            <div class="layui-input-inline">
               <input type="text" name="areaName" id="areaName" class="layui-input" readonly="readonly" unselectable='on' placeholder="请选择">
               <i class="layui-edge" id="selectIcon"></i>
               <input type="hidden" name="pcode" id="pcode" class="layui-input" value="">
           </div>
        </div>
       </div>
    </div>
     
     // 初始化引用css
     $("head").append("<link>");
     var toolbarCss = $("head").children(":last");
     toolbarCss.attr({
         rel: "stylesheet",
         type: "text/css",
         href:  "citySelect.css"
     }); 
     
     // 动态添加 areaSelect下拉框
     var areaStr = '<div class="area">'+
                    '<ul id="province" class="area-list"></ul>'+
                    '<ul id="city" class="area-list"></ul>'+
                    '<ul id="area" class="area-list"></ul>'+
             '</div>' ;
     $('#select').append(areaStr);
     
        //初始化调用
        function initFun() {
            var areaCode = $('#pcode').val();
            var codeList = areaCode.split('/');
            if (codeList.length == 3) {
                getArea('province', '-1');
                $('#province').fadeIn(200);
                getArea('city', codeList[0]);
                $('#city').fadeIn(200);
                getArea('area', codeList[1]);
                $('#area').fadeIn(200);
                setTimeout(function() {
                    showActive('province', codeList[0]);
                    showActive('city', codeList[1]);
                    showActive('area', codeList[2]);
                }, 200)
            } else {
                getArea('province', '-1');
            }
        }
        
        // 回显接口判断active状态
        function showActive(obj, pcode) {
            $('#' + obj).find('li').each(function(index, item) {
                if ($(item).attr('pcode') == pcode) {
                    $(item).addClass("active");
                    $('#' + obj).scrollTop((index - 2) * 38);
                }
            })
        }
    
        //省级区域点击事件
        $('body').on('click', '#province li', function() {
            $(this).addClass('active').siblings().removeClass('active')
            $('#city').fadeIn(200);
            $('#area').hide();
            var pcode = $(this).attr('pcode');
            // 获取城市区域列表
            getArea('city', pcode);
        })
    
        //市级区域点击事件
        $('body').on('click', '#city li', function() {
            $(this).addClass('active').siblings().removeClass('active')
            $('#area').fadeIn(200);
            var pcode = $(this).attr('pcode');
            // 获取区/县区域列表
            getArea('area', pcode);
        })
    
        // 区县/区域点击
        $('body').on('click', '#area li', function() {
            $(this).addClass('active').siblings().removeClass('active');
            $('.area').slideUp(300);
            // 区域名字
            var selectName = selectArea('province') + '/' + selectArea('city') + '/' + selectArea('area');
            // 区域标识
            var areaCode = selectCode('province') + '/' + selectCode('city') + '/' + selectCode('area');
            $('#areaName').val(selectName);
            $('#pcode').val(areaCode);
            $('#selectIcon').removeClass('layui-edge-open');
        })
    
        // 获取区域名字
        function selectArea(obj) {
            var areaName = $('#' + obj).find('.active').text();
            return areaName;
        }
    
        // 获取区域标识
        function selectCode(obj) {
            var areaCode = $('#' + obj).find('.active').attr('pcode');
            return areaCode;
        }
    
        // 接口获取区域
        function getArea(obj, pcode) {
            $('#' + obj).empty();
            $.get("http://192.168.1.186:8091/sysArea/list", {
                pcode: pcode
            }, function(res) {
                var li = '';
                for (var i = 0; i < res.data.length; i++) {
                    li = '<li pcode="' + res.data[i].areacode + '">' + res.data[i].areaname + '</li>';
                    $('#' + obj).append(li);
                }
            })
        }
    
        // 点击选择框选择区域
        $('#areaName').on("click", function(e) {
            if ($(".area").css("display") == "none") {
                //初始化调用
                initFun();
                $(".area").fadeIn();
                $("#province").fadeIn(200);
                $('#selectIcon').addClass('layui-edge-open');
            } else {
                $('#selectIcon').removeClass('layui-edge-open');
            }
        });
    
        //点击任意区域关闭
        $(document).mousedown(function(e) {
            //只有当某对象存在时才会有的点击任意处出现的事件效果
            if ($(e.target).parents(".area").length == 0) {
                $(".area").fadeOut(); //显示隐藏
                $('#selectIcon').removeClass('layui-edge-open');
            } else {
                return false
            }
        })
    .area {
        position: absolute;
        top: 40px;
        left: 110px;
        height: 252px;
        width: 606px;
        z-index: 1000;
        background-color: #fff;
        display: none;
    }
    
    ul li {
        list-style: none;
    }
    
    .area-list {
        float: left;
        height: 250px;
        width: 200px;
        border: 1px solid #ccc;
        border-radius: 5px;
        overflow: auto;
        box-shadow: 0 5px 10px #eee;
        display: none;
    }
    
    .area-list li {
        width: 100%;
        color: #48576a;
        height: 36px;
        line-height: 1.5;
        padding: 8px 28px 8px 15px;
        box-sizing: border-box;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        position: relative;
    }
    
    .area-list li:hover {
        background-color: rgba(65, 105, 225, .3);
    }
    
    .area-list .active {
        color: #fff !important;
        background-color: #20a0ff !important;
    }
    .area-list:nth-of-type(1) li:after,
    .area-list:nth-of-type(2) li:after{
        content:'';
        width: 0;
        height: 0;
        border-left: 8px solid #bfcbd9;
        border-right: 8px solid transparent;
        border-top: 5px solid transparent;
        border-bottom: 5px solid transparent;
        position: absolute;
        right: 3px;
        top: 13px;
        display: block;
    }
    
    .layui-form-select .layui-edge-open{
        margin-top: -9px;
        -webkit-transform: rotate(180deg);
        transform: rotate(180deg);
    }
  • 相关阅读:
    javadoc 自动生成java帮助文档
    JS 长按 移动端
    Java Web 深入分析(8) Servlet工作原理解析
    Java Web 深入分析(7) Jetty原理解析
    flex在众多手机浏览器上的兼容方案(亲测华为手机自带浏览器)
    js 实现纯前端将数据导出excel两种方式,亲测有效
    Git回滚代码到某个commit
    父子组件通信(vuex的方式)
    JS判断单、多张图片加载完成
    css img 等比例自动缩放
  • 原文地址:https://www.cnblogs.com/wwthuanyu/p/14754055.html
Copyright © 2011-2022 走看看