• layui结合ajax实现下拉联动效果


    在这里插入图片描述

    大家好好,我是雄雄,欢迎关注公众号:雄雄的小课堂。

    昨天分享的是使用layui集合springboot实现图片上传,文章地址在这里,需要的小伙伴们可以去看看:

    今天给大家分享的内容也是那天在造项目的时候完成的,难道是不难,不过比较经典。那就是联动菜单的实现。

    我们下来看看效果:

    在这里插入图片描述

    一般常见的也用在“省市级联动菜单”,比如第一个下拉列表的值是所有省份名字,第二个则是第一个所选省的所属市,第三个则是县,乡镇、村屯等。

    接下来我们看看如何实现该功能。

    前端页面采用layui框架,则需要我们引入layui.css和layui.js,这里就不细说了,下面是下拉列表的代码:

    <div class="layui-form-item">
            <label class="layui-form-label">商品类别</label>
            <div class="layui-input-inline" style=" 20%">
                <select name="categoryleveloneId"   lay-filter="classify" id="one">
                    <option value="">请选择</option>
                    <option  th:each="cate : ${oneList}" th:value="${cate.id}" th:text="${cate.name}"></option>
    
                </select>
            </div>
            <div class="layui-input-inline" style="  20%">
                <select name="categoryleveltwoId"  lay-filter="twoCate" id="two">
                    <option value="">请选择</option>
                    <option  th:each="cate : ${twoList}" th:value="${cate.id}" th:text="${cate.name}"></option>
                </select>
            </div>
            <div class="layui-input-inline" style="  20%">
                <select name="categorylevelthreeId" id="three">
                    <option value="">请选择</option>
                    <option  th:each="cate : ${threeList}" th:value="${cate.id}" th:text="${cate.name}"></option>
                </select>
            </div>
        </div>
    

    代码中:th:each="cate : ${threeList}"thymeleaf的语法。注意每个select标签的name和id。

    下面我们来看看<script>中的代码,主要业务都在这里面:

    ``

    <script>
        layui.use(['form', 'layer','laydate'],function(){
            $ = layui.jquery;  //获取jquey模块
            var form = layui.form; //获取form模块
            //第一个select改变事件
            form.on('select(classify)',function (data){
                //监听到了下拉框选择的选项,传递过来
                // console.log(data);//在控制台输出信息
                var classfies = data.value;
                //再利用ajax将数据传到后端,来获取到对应下拉框选项而出现的值
                $.ajax({
                    type:"post",
                    url:"/getCateByParentid",
                    data:{"pid":classfies},
                    dataType:"json",
                    success:function (d) {
                        // layer.alert(1122)
                        //对应的值传回,拼出html下拉框语句
                        var tmp='';
                        for (var i in d){
                            tmp +='<option value="'+d[i].id+'">'+d[i].name+'</option>';
    
                        }
                        $("#two").html(tmp);
                        form.render();
                    },error:function () {
                        layer.alert('请求失败');
                    }
                });
    
            });
    
            //第二个select改变事件
            form.on('select(twoCate)',function (data){
                //监听到了下拉框选择的选项,传递过来
                // console.log(data);//在控制台输出信息
                var classfies = data.value;
                //再利用ajax将数据传到后端,来获取到对应下拉框选项而出现的值
                $.ajax({
                    type:"post",
                    url:"/getCateByParentid",
                    data:{"pid":classfies},
                    dataType:"json",
                    success:function (d) {
                        //对应的值传回,拼出html下拉框语句
                        var tmp='';
                        for (var i in d){
                            tmp +='<option value="'+d[i].id+'">'+d[i].name+'</option>';
    
                        }
                        $("#three").html(tmp);
                        form.render();
                    },error:function () {
                        layer.alert('请求失败');
                    }
                });
            });
        })
    </script>
    

    上面我们可以看得到,数据是通过ajax请求的,接下来,看看后台springmvc中所对应的代码:

    //根据父编号查询信息(给前台传json格式的数据)
    @RequestMapping("getCateByParentid")
    @ResponseBody
    public List<ProductCategory> getCateByParentid(Integer pid) {
        List<ProductCategory> cList = productCategoryService.getAllCategoryByParent(pid);
        return cList;
    }
    

    因为两个ajax所请求的方法都是同一个 getCateByParentid,所以控制器中只写一个即可,最后运行,效果就出来了。

    因为两个ajax所请求的方法都是同一个 getCateByParentid,所以控制器中只写一个即可,最后运行,效果就出来了。

    看完了吗?看完了点个赞再走呗~

  • 相关阅读:
    BootStrap 模态框禁用空白处点击关闭
    【云计算】使用nsenter进入Docker容器进行调试
    【架构】Nginx如何设置X-Request-ID请求头,记录请求时间:毫秒?
    【架构】微服务系列文章
    【云计算】OpenStack项目全面介绍
    【云计算】CloudFoundry参考资料
    【云计算】OpenShift容器服务参考
    【Web】Django OAuth invalid_grant error
    【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和"普通变量"之完全解读
    【云计算】OpenStack Horizon DashBoard定制化,完整实现前后台交互
  • 原文地址:https://www.cnblogs.com/a1111/p/14877293.html
Copyright © 2020-2023  润新知