jquery级联

js:

$(document).ready(function(){

    //找到三个下拉框
    var carnameSelect = $(".carname").children("select");
    var cartypeSelect = $(".cartype").children("select");
    var wheeltypeSelect = $(".wheeltype").children("select");
    var carimg = $(".carimg");
    //给三个下拉框注册事件
    carnameSelect.change(function(){
        //1.需要获得当前下拉框的值
        var carnameValue = $(this).val();
        //1.1只要第一个下拉框内容有变化,第三个下拉框都要先隐藏起来
        wheeltypeSelect.parent().hide();
        //1.2将汽车图片隐藏起来
        carimg.hide().attr("src","");            //为了显示图片时候不先显示一下上次图片,所以清除src的值
        //2.如果值不为空,则将下拉框的值传送给服务器
        if (carnameValue != "") {
            if (!carnameSelect.data(carnameValue)) {        //判断该键对应的值在缓存中是否有数据
                $.post("ChainSelect",{keyword: carnameValue, type: "top"},function(data){
                    //2.1接收服务器返回的汽车类型
                    if (data.length != 0) {
                        //2.2解析汽车类型的数据,填充到汽车类型的下拉框中
                        cartypeSelect.html("");
                        $("<option value=''>请选择汽车类型</option>").appendTo(cartypeSelect);
                        for (var i = 0; i < data.length; i++) {
                            $("<option value='" + data[i] + "'>" + data[i] + "</option>").appendTo(cartypeSelect);
                        }
                        //2.2.1汽车类型的下拉框显示出
                        cartypeSelect.parent().show();
                        //2.2.2第一个下拉框后面的指示图片显示出来
                        carnameSelect.next().show();
                    } else {
                        //2.3没有任何汽车类型的数据
                        cartypeSelect.parent().hide();
                        carnameSelect.next().hide();
                    }
                    carnameSelect.data(carnameValue, data);        //data函数用来缓存已经访问过的数据
                }, "json");        //第四个参数json表示返回的json对象会被js服务器自动转化为js对象
            } else {
                var data = carnameSelect.data(carnameValue);
                //2.1接收服务器返回的汽车类型
                if (data.length != 0) {
                    //2.2解析汽车类型的数据,填充到汽车类型的下拉框中
                    cartypeSelect.html("");
                    $("<option value=''>请选择汽车类型</option>").appendTo(cartypeSelect);
                    for (var i = 0; i < data.length; i++) {
                        $("<option value='" + data[i] + "'>" + data[i] + "</option>").appendTo(cartypeSelect);
                    }
                    //2.2.1汽车类型的下拉框显示出
                    cartypeSelect.parent().show();
                    //2.2.2第一个下拉框后面的指示图片显示出来
                    carnameSelect.next().show();
                } else {
                    //2.3没有任何汽车类型的数据
                    cartypeSelect.parent().hide();
                    carnameSelect.next().hide();
                }
            }
        } else {
            //3.如果值为空,那么第二个下拉框所在span要隐藏起来,第一个下拉框后面的指示图片也要隐藏
            cartypeSelect.parent().hide();
            carnameSelect.next().hide();
        }
    });

    cartypeSelect.change(function(){
        //1.需要获得当前下拉框的值
        var cartypeValue = $(this).val();
        //1.1将汽车图片隐藏起来
        carimg.hide().attr("src","");
        //2.如果值不为空,则将下拉框的值传送给服务器
        if (cartypeValue != "") {
            if (!cartypeSelect.data(cartypeValue)) {
                $.post("ChainSelect",{keyword: cartypeValue, type: "sub"},function(data){
                    //2.1接收服务器返回的汽车类型
                    if (data.length != 0) {
                        //2.2解析汽车类型的数据,填充到车轮类型的下拉框中
                        wheeltypeSelect.html("");
                        $("<option value=''>请选择车轮类型</option>").appendTo(wheeltypeSelect);
                        for (var i = 0; i < data.length; i++) {
                            $("<option value='" + data[i] + "'>" + data[i] + "</option>").appendTo(wheeltypeSelect);
                        }
                        //2.2.1车轮类型的下拉框显示出
                        wheeltypeSelect.parent().show();
                        //2.2.2第二个下拉框后面的指示图片显示出来
                        cartypeSelect.next().show();
                    } else {
                        //2.3没有任何汽车类型的数据        
                        wheeltypeSelect.parent().hide();
                        cartypeSelect.next().hide();
                    }
                    cartypeSelect.data(cartypeValue, data);
                }, "json");
            } else {
                var data = cartypeSelect.data(cartypeValue);
                //2.1接收服务器返回的汽车类型
                if (data.length != 0) {
                    //2.2解析汽车类型的数据,填充到车轮类型的下拉框中
                    wheeltypeSelect.html("");
                    $("<option value=''>请选择车轮类型</option>").appendTo(wheeltypeSelect);
                    for (var i = 0; i < data.length; i++) {
                        $("<option value='" + data[i] + "'>" + data[i] + "</option>").appendTo(wheeltypeSelect);
                    }
                    //2.2.1车轮类型的下拉框显示出
                    wheeltypeSelect.parent().show();
                    //2.2.2第二个下拉框后面的指示图片显示出来
                    cartypeSelect.next().show();
                } else {
                    //2.3没有任何汽车类型的数据        
                    wheeltypeSelect.parent().hide();
                    cartypeSelect.next().hide();
                }
            }
        } else {
            //3.如果值为空,那么第三个下拉框所在span要隐藏起来,第二个下拉框后面的指示图片也要隐藏
            wheeltypeSelect.parent().hide();
            cartypeSelect.next().hide();
        }
    });

    wheeltypeSelect.change(function(){
        //1.获取车轮类型
        var wheeltypeValue = $(this).val();
        //2.根据汽车厂商名称,汽车型号和车轮类型得到汽车图片的文件名
        var carnameValue = carnameSelect.val();
        var cartypeValue = cartypeSelect.val();
        var carimgname = carnameValue + "_" + cartypeValue + "_" + wheeltypeValue + ".jpg";

        //3.显示出loading的图片
        carimg.hide();
        $(".carloading").show();
        //4.通过Javascript中的Image对象预装载图片
        var cacheimg = new Image();
        $(cacheimg).attr("src","images/" + carimgname).load(function(){        //图片加载完成后才会执行的load里面的方法
            //隐藏loading图片
            $(".carloading").hide();
            //显示汽车图片
            carimg.attr("src","images/" + carimgname).show();
        });
        //3.修改汽车图片节点的src的值,让汽车图片显示出来
        //carimg.attr("src","images/" + carimgname).show();
        //4.使汽车图片的节点显示出来
    });


    //给数据装载中的节点定义ajax事件,实现动画提示效果
    $(".loading").ajaxStart(function(){
        $(this).css("visibility","visible");
        $(this).animate({        //用于创建动画效果的函数
            opacity: 1                //非透明度
        },0);                                //多少毫秒后执行动画
    }).ajaxStop(function(){
        $(this).animate({
            opacity: 0
        },500);
    });
})


客户端:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>JQuery实例-级联下拉框效果</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link type="text/css" rel="stylesheet" href="css/chainselect.css" />
        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript" src="js/chainselect.js"></script>
    </head>
    <body>
        <div class="loading">
            <p><img src="images/data-loading.gif" alt="数据装载中" /></p>
            <p>数据装载中......</p>
        </div>
        <div class="car">
            <span class="carname">
                汽车厂商:
                <select>
                    <option value="" selected="selected">请选择汽车厂商</option>
                    <option value="BMW">宝马</option>
                    <option value="Audi">奥迪</option>
                    <option value="VW">大众</option>
                </select>
                <img src="images/pfeil.gif" alt="有数据" />
            </span>
            <span class="cartype">
                汽车类型:
                <select></select>
                <img src="images/pfeil.gif" alt="有数据" />
            </span>
            <span class="wheeltype">
                车轮类型:
                <select></select>
            </span>
        </div>
        <div class="carimage">
            <p><img src="images/img-loading.gif" alt="图片装载中" class="carloading" /></p>
            <p><img src="" alt="汽车图片" class="carimg"/></p>
        </div>
    </body>
</html>


### 回答1: jQuery级联展示是一种使用jQuery框架来实现多级连动效果的交互技术。通常情况下,当一个下拉菜单的选项发生变化时,我们需要通过发起异步请求更新下一个下拉菜单的选项列表。而使用jQuery级联展示则可以避免这种数据传输延迟的问题。它可以实现根据前一个下拉菜单中选定的选项,自动显示下一个下拉菜单中相应的选项,从而提高用户的交互体验和效率。 实现一个jQuery级联展示可以分为以下几个步骤: 1. 定义HTML代码,即各个下拉菜单的结构和选项内容。 2. 使用jQuery获取第一个下拉菜单的选项,并在选项发生变化时更新第二个下拉菜单中的选项。 3. 使用jQuery获取第二个下拉菜单的选项,并在选项发生变化时更新第三个下拉菜单中的选项。 4. 以此类推,直到所有下拉菜单中的选项都可以进行级联展示。 jQuery级联展示可以应用于多种场景,例如省市区三级联动的地址选择、商品筛选中的多选框联动、时间选择器中的年月日联动等。当然,实现级联展示也需要考虑到用户的交互习惯和界面设计的美观性,从而达到最佳的用户体验。 ### 回答2: jQuery级联展示(也称为下拉列表级联)是一种前端开发技术,它通过创建互相依赖的下拉列表来帮助用户进行选择。例如,在一个商品交易网站上,一个级联展示可以用于让用户选择产品类别和子类别,以便更容易地浏览和购买所需的产品。 实现级联展示的关键是使用jQuery编写可交互的脚本,以响应用户的选择,并根据所选的选项更新其他下拉列表。这通常涉及到从数据库或其他数据源获取相关信息,并在下拉列表中显示所需的选项和数据。 在实际应用中,级联展示可能需要处理不同的情况,例如:动态添加选项、动态加载选项、选项依赖关系的复杂性等。因此,编写一个可靠、易于使用的级联展示需要更多的工作和技巧。 在jQuery的生态系统中,有许多用于构建级联展示的插件和库。这些插件和库可以大大简化级联展示的实现,并提供更多的功能和特性,如搜索、多级别支持、样式定制等。 总的来说,jQuery级联展示是一种重要的界面交互技术,它可以提升用户对数据选择的便捷性,并增强用户体验,同时也有助于提高网站的可用性和可访问性。 ### 回答3: jQuery级联展示是指控制不同HTML元素之间的数据关系,实现一个或多个下拉框的内容随着选择而动态改变的效果。这种技术的应用场景十分广泛,比如省市县/区选择、商品分类筛选等。 jQuery级联展示原理基于DOM事件机制,一般采用change事件触发处理函数的方式实现。首先,需要准备好几个下拉框(select元素),可以使用HTML语言标记他们,同时需要为每一个下拉框编写具有特定功能的jQuery代码。 在代码中,为下拉框的change事件绑定处理函数,函数中通过选择器找到对应的后续下拉框元素,清空它的option,再根据当前选中的option的value值,从预定的JSON格式的数据源中筛选出相应的值并将这些值渲染为新的option。具体实现时,可以采用jQuery的Ajax异步数据请求机制,请求后端接口返回数据源,或者将数据源直接嵌入前端HTML文本中。还可以提高用户交互度和体验性,应用下拉框搜索插件、动画和Loading效果等。 因为jQuery的良好兼容性与灵活性,被广泛应用于各类前端Web开发项目中。因此,不少JavaScript框架和组件库(如Bootstrap、jQueryUI、vue.js等)也提供了相关功能,以方便开发者快速实现级联展示的效果。总的来说,jQuery级联展示效果简单易用,但也需要注意前端性能、代码质量、数据安全与可维护性等方面的问题。涉及到的知识领域包括HTML/CSS/JavaScript语言、jQuery编程、JSON格式理解等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值